r - 在函数内交叉连接 data.table

标签 r data.table

我想创建一个交叉连接 data.table在一个函数中。说,我们有一个向量 vals <- c("yes", "no") .现在这个有效:CJ(vals, vals) .但是,根据函数输入,我可能需要创建例如CJ(vals, vals, vals, vals)反而。有点像

vals <- c("yes", "no")
n <- 4
CJ(rep(vals, n))

显然行不通。如何以灵活的方式指定交叉连接的向量?

最佳答案

您可以使用 ... 来引用从调用函数传递下来的参数...?

require( data.table )
f <- function( ... ){
    CJ(...)
}

f( c(1:2) , c(3:4) )
#   V1 V2
#1:  1  3
#2:  1  4
#3:  2  3
#4:  2  4

编辑这个怎么样?

do.call(CJ, replicate(n, vals, simplify=FALSE))

#      V1  V2  V3  V4
#  1:  no  no  no  no
#  2:  no  no  no yes
#  3:  no  no yes  no
#  4:  no  no yes yes
#  5:  no yes  no  no
#  6:  no yes  no yes
#  7:  no yes yes  no
#  8:  no yes yes yes
#  9: yes  no  no  no
# 10: yes  no  no yes
# 11: yes  no yes  no
# 12: yes  no yes yes
# 13: yes yes  no  no
# 14: yes yes  no yes
# 15: yes yes yes  no
# 16: yes yes yes yes

关于r - 在函数内交叉连接 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24365685/

相关文章:

r - 使用 fread 导入数据后所有列均作为字符

r - R中基于不等式的条件累积和

r - dplyr::select()与某些可能在数据框中不存在的变量?

R data.table - 将单个 ID 的多个组转换为多个列

r - 在 r 中创建二元运算符

r - 将范围的端点与序列合并

r - 在 (R)markdown 文本正文输出中包含 `bibentry` 的文本

r - 查找文件夹中倒数第二个修改的文件而不是文件夹中最终修改的文件

r - 使用 data.table 获得内存缓存的好方法

R 数据框行到矩阵中的列表