r语言 - 将列的列表(或向量)除以列表(或常量向量)



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

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))]

我们可以将"denList"的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]))
}

最新更新