使用paste0函数时,get(x)在R data.table中不起作用

问题描述 投票:0回答:1

目前我正在努力解决 R 数据表中的 get 函数。特别是,我正在尝试 conTMLE 功能here:

每当我运行此函数时,R 都会返回如下错误消息: “get(paste0("int.A", k)) 中的错误:第一个参数的长度 > 1”。 我发现是这里造成的

dt[, (paste0("W", k+1)):=(get(paste0("int.A", k)))/(get(paste0("fit.A", k)))]

这里k是一个循环,我尝试了一些方法,比如添加as.character。我还尝试在每个循环中定义 j = k,但它导致了更多问题,例如“ eval(jsub, SDenv,parent.frame()) : object 'j' not find”。

目前,我正在考虑在字符串前面添加 .. 。但是,我尝试将“(get(..paste0(“int.A”,k)))”作为“(get(paste0(“..”,“int.A”,k)))”。它们都不起作用。

我想知道如何解决这个问题!预先感谢!!!!

r data.table
1个回答
0
投票

正如 @r2evans 指出的,您需要提供一个可重现的示例。下面的代码显示您的问题不可重现,因为您的代码行表面上有效。因此,正如@MichaelChirico 指出的那样,问题出在其他地方。

library(data.table)
dt <- data.table(int.A1 = c(50,60), int.A2 = c(120,8), fit.A1 = c(1,3), fit.A2 = c(2,4))
for (k in 1:2) {
  dt[, (paste0("W", k+1)):=(get(paste0("int.A", k)))/(get(paste0("fit.A", k)))]
}
dt
> dt
   int.A1 int.A2 fit.A1 fit.A2    W2    W3
    <num>  <num>  <num>  <num> <num> <num>
1:     50    120      1      2    50    60
2:     60      8      3      4    20     2
© www.soinside.com 2019 - 2024. All rights reserved.