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"

一个字,妙~~~啊~


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

相关推荐
剩下了什么9 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥9 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉9 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
灰子学技术9 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
java搬砖工-苤-初心不变9 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
二十雨辰10 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码10 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚10 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂10 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas13610 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript