gpt4 book ai didi

r - 在 data.table 中的 j 表达式中使用 ..col

转载 作者:行者123 更新时间:2023-12-04 09:26:21 26 4
gpt4 key购买 nike

我无法从 ..j 获得所需的行为最新版本 data.table 中的语法,当我想使用列范围内的变量查询列,然后操作该变量时。举例来说,这是一个表格:

A <- data.table(myValA = c(6,23,7,2,5), myValB = c(43,12,7,89,2))
valA <- "myValA"
valB <- "myValB"

我想逐个获取两列的元素乘积:
A[, myValA * myValB]

[1] 258 276 49 178 10

但我想通过引用调用列,使用调用范围内的变量, valAvalB .要简单地访问变量, ..valA语法工作正常。
A[, ..valA]

myValA
1: 6
2: 23
3: 7
4: 2
5: 5

..valB 类似.但是当我尝试将 j 中的两列相乘时,使用旧的 with=False款式还是新款 ..j样式命令,我收到错误:
A[, ..valA * ..valB]
Error in eval(jsub, SDenv, parent.frame()) : object '..valA' not found

A[, valA * valB, with = FALSE]
Error in valA * valB : non-numeric argument to binary operator

我在这里缺少什么?

更新:

我掌握了解决这个问题的一些适当方法(为下面的 akrun 欢呼),但我也试图更多地了解为什么这首先不起作用。至少在我对语法的理解中,没有任何东西让我明白为什么不应该这样做。

最佳答案

我们可以在 .SDcols 中指定然后使用 Reduce 进行元素乘法

A[, Reduce(`*`, .SD), .SDcols = c(valA, valB)]
#[1] 258 276 49 178 10

或者不是有两个对象,而是创建一个对象
v1 <- c(valA, valB)
A[, ..v1][, do.call(`*`, .SD)]
#[1] 258 276 49 178 10

或者我们可以单独评估并相乘
(A[, ..valA] * A[, ..valB])[[1]]
#[1] 258 276 49 178 10

关于r - 在 data.table 中的 j 表达式中使用 ..col,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43944821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com