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"

一个字,妙~~~啊~


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

相关推荐
Am心若依旧40916 分钟前
[c++11(二)]Lambda表达式和Function包装器及bind函数
开发语言·c++
明月看潮生18 分钟前
青少年编程与数学 02-004 Go语言Web编程 20课题、单元测试
开发语言·青少年编程·单元测试·编程与数学·goweb
大G哥27 分钟前
java提高正则处理效率
java·开发语言
指尖上跳动的旋律30 分钟前
shell脚本定义特殊字符导致执行mysql文件错误的问题
数据库·mysql
VBA633738 分钟前
VBA技术资料MF243:利用第三方软件复制PDF数据到EXCEL
开发语言
轩辰~40 分钟前
网络协议入门
linux·服务器·开发语言·网络·arm开发·c++·网络协议
一勺菠萝丶41 分钟前
MongoDB 常用操作指南(Docker 环境下)
数据库·mongodb·docker
小_太_阳1 小时前
Scala_【1】概述
开发语言·后端·scala·intellij-idea
向宇it1 小时前
【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理
开发语言·unity·c#·编辑器·游戏引擎
古希腊掌管学习的神1 小时前
[LeetCode-Python版]相向双指针——611. 有效三角形的个数
开发语言·python·leetcode