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"

一个字,妙~~~啊~


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

相关推荐
conkl7 分钟前
Flask 与 MySQL 数据库集成:完整的 RESTful API 实现指南
数据库·mysql·flask
何中应41 分钟前
MyBatis-Plus字段类型处理器使用
java·数据库·后端·mybatis
迎風吹頭髮1 小时前
UNIX下C语言编程与实践21-UNIX 文件访问权限控制:st_mode 与权限宏的解析与应用
c语言·数据库·unix
毕设源码-郭学长1 小时前
【开题答辩全过程】以 PHP茶叶同城配送网站的设计与实现为例,包含答辩的问题和答案
开发语言·php
炬火初现2 小时前
SQL语句——高级字符串函数 / 正则表达式 / 子句
数据库·sql
TTGGGFF2 小时前
云端服务器使用指南:利用Python操作mysql数据库
服务器·数据库·python
编程充电站pro2 小时前
SQL 性能优化:为什么少用函数在 WHERE 条件中?
数据库·sql
JavaPub-rodert3 小时前
用 go-commons 打造更优雅的字符串处理工具
开发语言·后端·golang
Archie_IT3 小时前
嵌入式八股文篇——P1 关键字篇
c语言·开发语言·单片机·mcu·物联网·面试·职场和发展
workflower3 小时前
将图片中的图形转换为可编辑的 PPT 图形
java·开发语言·tomcat·powerpoint·个人开发·结对编程