R语言-快速对多个变量取交集

大家好,这里 【生信摆渡】

获取更好阅读体验:R语言-快速对多个变量取交集

两个变量取交集

众所周知,在R中,两个变量取交集可以使用intersect函数:

R 复制代码
# 两个变量取交集
string1 = letters
string2 = strsplit("Hello, bioinfobaidu!", "")[[1]]
intersect(string1, string2)
# [1] "a" "b" "d" "e" "f" "i" "l" "n" "o" "u"

随着输入变量增多,书写起来会逐渐麻烦,因为intersect只能接受两个变量。

结果就会形成套娃的样子,比如四个变量取交集:

R 复制代码
# 四个变量取交集
string1 = letters
string2 = strsplit("Hello, bioinfobaidu!", "")[[1]]
string3 = strsplit("wo zui niu bi", "")[[1]]
string4 = strsplit("wo shi sha bi", "")[[1]]
intersect(string1, intersect(string2, intersect(string3, string4)))
# [1] "b" "i" "o"

非常不方便。

那么我来10个变量,阁下又如何应对?

生成10个数字集合:

R 复制代码
# 生成10个数字集合
for(i in 1:10){
    var_name = paste0("var", i)
    set.seed(i)
    nums = sample(1:100, 80)
    assign(var_name, nums)
}

多个变量取交集

遇到这种需要逐个计算的,交给Reduce函数就行了。

使用Reduce函数可以大大减少代码量和提高代码美观性,可以用一个字来形容。早就想介绍了,这次先抛砖引玉不展开,下次再重点介绍!

Reduce函数接受两个变量,一个是处理方法,也就是函数,这个函数必须是二元函数。

另一个参数是列表或者是向量,对列表内的元素逐个进行累计二元运算,就是先将前两个元素进行运算,之后将结果与第三个元素进行运算,以此类推。

这完美符合我们的需求好吧~

比如四个变量:

R 复制代码
Reduce(intersect, list(string1, string2, string3, string4))
# [1] "b" "i" "o"

至少在美观上,简单了许多。

而对于变量名有规律的情况来说,不管多少变量,只需要短短的一行代码。

比如上面的10个变量:

R 复制代码
Reduce(intersect, lapply(paste0("var", 1:10), get))
# [1] 87 59 21 84 42 24 18 76 16

甚至,我们可以编写一个新的函数intersect2来进一步简化这一过程。

intersect2

R 复制代码
intersect2 <- function(...) Reduce(intersect, list(...))

这里用到了三个点...来接受要输入的变量,你想输入几个就输入几个,用逗号,隔开就行,非常方便。

试试:

R 复制代码
intersect2(string1, string2, string3, string4)
# [1] "b" "i" "o"

一个字,妙~~~啊~


学习生信知识,请持续关注 【生信摆渡】

相关推荐
三千道应用题10 分钟前
C#语言入门详解(18)传值、输出、引用、数组、具名、可选参数、扩展方法
开发语言·c#
忧郁的蛋~16 分钟前
使用.NET标准库实现多任务并行处理的详细过程
开发语言·c#·.net
躲在云朵里`16 分钟前
Spring Scheduler定时任务实战:从零掌握任务调度
java·数据库·mybatis
小白不想白a23 分钟前
【MySQL】常用SQL语句
数据库·sql·mysql
dragon_perfect24 分钟前
全流程基于Yolov8实现在Label-Studio实现半自动标注,已经把整个流程理清楚,把所有的坑解决。
开发语言·python·yolo·labelstudio
RestCloud29 分钟前
从MySQL到StarRocks:全量与增量同步的最佳实践
数据库·mysql·api
kalvin_y_liu29 分钟前
四款主流深度相机在Python/C#开发中的典型案例及技术实现方案
开发语言·python·数码相机
劲镝丶30 分钟前
malloc概述
c语言·开发语言·c++
Databend36 分钟前
Databend 八月月报:向量检索重磅上线,性能飞跃几十倍
数据库
1373i1 小时前
【Python】pytorch数据操作
开发语言·pytorch·python