我正在尝试创建数据的递归应用标量列表。
虚拟数据如下:
dt <- data.table(mtcars)[1,1:3]
ncol(dt)
cols <- colnames(dt)
for(j in 1:ncol(dt)){
dt_loop <- dt
scaled_dt <- dt_loop[,j,with=FALSE]*(1+0.01)
#drop scaled var
dt_loop[ , (j) := NULL ]
jj <- cbind(scaled_dt,dt_loop)
#go back to original order
setcolorder(jj,cols)
assign(paste('dt_', j, sep=''),jj, envir = .GlobalEnv)
}
然后,我想保存所有分配的排列,即dt_1
,dt_2
和dt_3
中的单个列表,并通过paste0
编程设置列表名称。
我尝试使用set
操作员用于data.table
,但我失败了。
通常,我正在做的事情似乎非常低效,应该有一种适当的方法来实现从单个数据的递归扩展。
奖励点如果可以为每个dt_1
,dt_2
和dt_3
创建额外的行,该行描述了对每个元素进行的操作。因此,对于dt_1
,它将是一个字符"mpg_+1%"
mpg cyl disp Delta
1: 21.21 6 160 mpg_+1%
,最终列表看起来像这样:
dt_list <- list(dt_1 = dt_1,
dt_2 = dt_2,
dt_3 = dt_3)
lapply(names(dt), function(col)
copy(dt)[, (col) := get(col)*1.01][, Delta := paste0(col, "_+1%")])
#[[1]]
# mpg cyl disp Delta
#1: 21.21 6 160 mpg_+1%
#
#[[2]]
# mpg cyl disp Delta
#1: 21 6.06 160 cyl_+1%
#
#[[3]]
# mpg cyl disp Delta
#1: 21 6 161.6 disp_+1%