我可以在不使用 apply 的情况下附加这个字符向量吗?
Could I have appended this vector of characters without using apply?
我最近生成了这个输出:
> 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
来获得所需的换行符(据我所知,向 [=15 添加 \n 参数=] 应该已经足够了,但实际上它什么也没做)。
然而,最令我惊讶的是我需要使用 apply
。如果我没记错的话,paste
已经矢量化了,所以 paste
本身或者 sapply
和 paste
应该就足够了。有什么办法可以不使用 apply 来实现我的目标吗?可能有一个 tidyverse one-liner 为此,但我更喜欢看到一个惯用的基础 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 '))
我最近生成了这个输出:
> 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
来获得所需的换行符(据我所知,向 [=15 添加 \n 参数=] 应该已经足够了,但实际上它什么也没做)。
然而,最令我惊讶的是我需要使用 apply
。如果我没记错的话,paste
已经矢量化了,所以 paste
本身或者 sapply
和 paste
应该就足够了。有什么办法可以不使用 apply 来实现我的目标吗?可能有一个 tidyverse one-liner 为此,但我更喜欢看到一个惯用的基础 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 '))