r - do.call 构建并执行 data.table 命令

标签 r data.table plyr

我有一个小的data.table,代表每个测试单元格的一条记录(AB 测试结果),并且我想添加更多的列来将每个测试单元格与其他测试单元格进行比较。换句话说,我想要添加的列数将取决于相关 AB 测试中有多少个测试单元。

我的data.table看起来像:

Group   Delta     SD.diff
Control     0           0
Cell1 0.00200 0.001096139
Cell2 0.00196 0.001095797
Cell3 0.00210 0.001096992
Cell4 0.00160 0.001092716

我想添加以下列(这里的数字是垃圾):

Group v.Cell1    v.Cell2   v.Cell3   v.Cell4
Control  0.45       0.41      0.45      0.41 
Cell1    0.50       0.58      0.48      0.66
Cell2    0.58       0.50      0.58      0.48
Cell3    0.48       0.58      0.50      0.70
Cell4    0.66       0.48      0.70      0.50

我确信 do.call 是可行的方法,但我无法弄清楚如何将一个 do.call 嵌入到另一个 do.call 中以生成脚本......而且我无法工作说明如何执行脚本(总共 20 行)。我目前最接近的是:

a <- do.call("paste",c("test.1.results <- mutate(test.1.results, P.Better.",list(unlist(test.1.results[,Group]))," = pnorm(Delta, test.1.results['",list(unlist(test.1.results[,Group])),"'][,Delta], SD.diff,lower.tail=TRUE))", sep=""))

生成 5 行脚本,例如:

test.1.results <- mutate(test.1.results, P.Better.Cell2 = pnorm(Delta, test.1.results['Cell2'][,Delta], SD.diff,lower.tail=TRUE))

它仅将一个测试单元的结果与自身进行比较.. 0.50 结果(由于偶然而产生的差异)。没有任何用处,因为我需要将每个测试进行相互比较。

不知道该去哪里。

最佳答案

更新:在 v1.8.11 , FR #2077现已实现 - set() 现在可以通过引用添加列,.来自 NEWS :

set() is able to add new columns by reference now. For example, set(DT, i=3:5, j="bla", 5L) is equivalent to DT[3:5, bla := 5L]. This was FR #2077. Tests added.


使用set()通常可以更轻松地完成此类任务。为了演示,这里是您在问题中的翻译(未经测试)。但我意识到你想要的东西与你发布的内容不同(我不太明白,很快)。

for (i in paste0("Cell",1:4))
  set(DT,                   # the data.table to update/add column by reference
    i=NULL,                 # no row subset, NULL is default anyway
    j=paste("P.Better.",i), # column name or position. must be name when adding
    value = pnorm(DT$Delta, DT[i][,Delta], DT$SD.diff, lower.tail=TRUE)

请注意,您只能添加新列的子集,其余部分将用 NA 填充。两者都带有 :=set

关于r - do.call 构建并执行 data.table 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13869144/

相关文章:

r - 使用plyr绘制多个不同组的密度图(基于因子水平)

r - 如何计算大型数据集的平均值

r - 在 R 中更新 data.table 中的整行

r - data.table 结果在向量扫描和二分查找丢失数据之间有所不同

r - 如何将R中公共(public)列上的两个数据框与其他数据框合并?

从第二个 "\n"和其余部分中删除字符串中的行返回(不要删除第一个)

r - 在 randomForest 包的 partialPlot 中使用变量名作为参数

r - 将 bookdown 移植到 distill::distill_article 不支持 theorem 环境

r - 在制作 Twitter wordcloud 时运行 'tolower' 后出现 FUN 错误

r - 不使用apply函数对data.table的每一行进行操作的方法