按列表(或常量向量)划分列的列表(或向量)

时间:2017-02-26 17:34:54

标签: r data.table

我想通过动态创建的常量列表(denList)来划分动态创建的列名(或向量)列表(vlist)。因此列列表第一列中的每个元素除以常量列表中的第一个常量等。下面的代码设置一个包含两列的数据表,并创建两个带常量的变量。最后一行是我尝试进行分割但失败了。帮助解决看起来应该是一个简单的问题,非常感谢。

library(data.table)
DT <- data.table(v1 = runif(10), v2 = runif(10))
v1Den <- 10
v2Den <- 20
denList <- as.vector(c("v1Den", "v2Den"))
vlist <- as.vector(c("v1", "v2"))
ratioList <- as.vector(c("V1rat", "V2rat"))

DT[,(ratioList) := Map(`/`, mget(vlist), mget(denList))]

1 个答案:

答案 0 :(得分:1)

我们可以为&#39; denList&#39;指定envir作为.GlobalEnv

DT[,(ratioList) := Map(`/`, mget(vlist), mget(denList, envir = .GlobalEnv))]
DT
#          v1         v2      V1rat       V2rat
#1: 0.7259460 0.12956933 0.07259460 0.006478467
#2: 0.8867084 0.07180409 0.08867084 0.003590204
#3: 0.3466163 0.46579134 0.03466163 0.023289567
#4: 0.2764356 0.02441249 0.02764356 0.001220625
#5: 0.7028396 0.71207397 0.07028396 0.035603699
#6: 0.9035681 0.51862505 0.09035681 0.025931252
#7: 0.1842809 0.78817567 0.01842809 0.039408784
#8: 0.1215719 0.95116182 0.01215719 0.047558091
#9: 0.8056753 0.39964896 0.08056753 0.019982448
#10:0.2990145 0.87846840 0.02990145 0.043923420

或另一个选项是set

for(j in seq_along(vlist)){
 set(DT, i = NULL, j = ratioList[j], value =  DT[[vlist[j]]]/get(denList[j]))
}
相关问题