R data.table逐列乘法

R data.table逐列乘法,r,data.table,R,Data.table,我有一个简单的乘法问题,它不会导致任何警告,但不会执行正确的操作。我只想添加一列GDP_q0、GDP_q1和GDP_q2,它们等于价格+失业率+外汇*CPI。使用数据表无法正确执行多重应用程序(我不知道在这种情况下数据表的行为)价格、失业率和cpi总是相等的(价格q0=价格q1=价格q2) 这是在做正确的事情 for(j in 0:2){ nam= paste0('gdp_q', j) pf[, (nam) := pf$price + pf$unemployment- pf[[past

我有一个简单的乘法问题,它不会导致任何警告,但不会执行正确的操作。我只想添加一列GDP_q0、GDP_q1和GDP_q2,它们等于价格+失业率+外汇*CPI。使用数据表无法正确执行多重应用程序(我不知道在这种情况下数据表的行为)价格、失业率和cpi总是相等的(价格q0=价格q1=价格q2)

这是在做正确的事情

for(j in 0:2){ 
  nam= paste0('gdp_q', j)
  pf[, (nam) := pf$price + pf$unemployment- pf[[paste0('FX_q', j)]] * pf$CPI]
}

我认为它应该与使用数据表的乘法中的一个技巧相联系。

如果我们想在多个列上执行此操作,请使用
lappy
Map

priceq <- paste0('price_q', 0:2)
unemploymentq <- paste0('unemployment_q', 0:2)
Fxq <- paste0('FX_q', 0:2)
CPIq <- paste0('CPI_q', 0:2)
f1 <- function(x, y, u, v) x + y - u * v

test[, paste0('gdp_q', 0:2) := Map(f1, mget(priceq), 
          mget(unemploymentq), mget(Fxq), mget(CPIq))]

priceq@ricpiana。也许,您可以使用
.SD[,…priceq]
来代替
mget
,这应该会使它更快
priceq <- paste0('price_q', 0:2)
unemploymentq <- paste0('unemployment_q', 0:2)
Fxq <- paste0('FX_q', 0:2)
CPIq <- paste0('CPI_q', 0:2)
f1 <- function(x, y, u, v) x + y - u * v

test[, paste0('gdp_q', 0:2) := Map(f1, mget(priceq), 
          mget(unemploymentq), mget(Fxq), mget(CPIq))]