【R每日一贴】R中生成字符串所有成对组合?
测试开头
测试结尾
文/陆勤
问题描述:你有两组字符串,现要生成字符串所有成对组合?
解决方案:使用函数outer和paste生成字符串所有成对组合,语法格式如下。
outer(string1, string2, paste, sep="")
举例说明:
> student <- c("s1", "s2", "s3", "s4")
> class <- c("c1", "c2", "c3")
> outer(student, class, paste, sep="-")
[,1] [,2] [,3]
[1,] "s1-c1" "s1-c2" "s1-c3"
[2,] "s2-c1" "s2-c2" "s2-c3"
[3,] "s3-c1" "s3-c2" "s3-c3"
[4,] "s4-c1" "s4-c2" "s4-c3"
说明:outer函数的结果是一个矩阵,若是要生成一个向量,则使用函数as.vector进行转换。
当把一组字符串与其自身进行组合,而顺序并不重要时,结果将是重复的组合。例如
> mat1 <- outer(class, class, paste, sep="-")
> mat1
[,1] [,2] [,3]
[1,] "c1-c1" "c1-c2" "c1-c3"
[2,] "c2-c1" "c2-c2" "c2-c3"
[3,] "c3-c1" "c3-c2" "c3-c3"
若我们需要去掉重复的组合,可以移除矩阵下三角或者上三角。函数lower.tri识别矩阵的下三角。例如
> lower.tri(mat1)
[,1] [,2] [,3]
[1,] FALSE FALSE FALSE
[2,] TRUE FALSE FALSE
[3,] TRUE TRUE FALSE
> mat1[!lower.tri(mat1)]#去掉重复的组合
[1] "c1-c1" "c1-c2" "c2-c2" "c1-c3" "c2-c3" "c3-c3"
【想一想】
1 outer函数有什么用?
2 笛卡尔积怎么理解?
【做一做】
1查阅outer函数的R帮助文档和应用实例?
【温馨话语】
太柔则靡,太刚则折;刚自柔出,柔能克刚。
我是陆勤,微信号:wangluqing360,你们在R路上的朋友,一起欣赏R路上的风景。PPV课R语言群:342699237,欢迎朋友们加入,共建最好的R社区。
赠人玫瑰,手有余香。若是觉得此文有用,欢迎分享给更多的人,让更多的人受用。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!