我最近生成了以下输出:
> RcppAlgos::permuteGeneral(c("G","R","S","H"),2)
[,1] [,2]
[1,] "G" "R"
[2,] "G" "S"
[3,] "G" "H"
[4,] "R" "G"
[5,] "R" "S"
[6,] "R" "H"
[7,] "S" "G"
[8,] "S" "R"
[9,] "S" "H"
[10,] "H" "G"
[11,] "H" "R"
[12,] "H" "S"
我的目标是将其转换为:
G vs R
G vs S
G vs H
R vs G
R vs S
R vs H
S vs G
S vs R
S vs H
H vs G
H vs R
H vs S
我的最终解决方案是writeLines(apply(RcppAlgos::permuteGeneral(c("G","R","S","H"),2),1,function(x) paste(x,collapse = " vs ")))
,但这不是我追求的。特别是,writeLines
打印输出而不是返回输出,而且我看不出为什么需要使用它writeLines
来获得所需的换行符(据我所知,在\ n参数上添加\ npaste
应该就足够了,但实际上它什么也没做) 。
但是,我最大的惊喜是我需要使用apply
。如果我没记错的话,paste
它已经被矢量化了,所以无论是单独使用paste
还是sapply
使用它paste
都应该足够。不使用应用程序,有什么方法可以实现我的目标吗?可能有一条整齐的衬里,但是我更喜欢看到惯用的基础R解决方案。
您可以在中传递一个函数permuteGeneral
:
unlist(RcppAlgos::permuteGeneral(c("G","R","S","H"),2,
FUN = function(x) paste(x, collapse = ' vs ')))
#[1] "G vs R" "G vs S" "G vs H" "R vs G" "R vs S" "R vs H"
#[7] "S vs G" "S vs R" "S vs H" "H vs G" "H vs R" "H vs S"
如果数据已经生成,我们可以使用
data <- RcppAlgos::permuteGeneral(c("G","R","S","H"),2)
paste(data[, 1], data[, 2], sep = ' vs ')
并且如果有很多列,我们不想单独编写它们。
do.call(paste, c(data.frame(data), sep = ' vs '))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句