【发布时间】:2017-09-20 01:59:06
【问题描述】:
我正在尝试创建一个 data.table 的递归应用标量列表,然后将其保存到一个列表中,以便我可以使用用户定义的函数进行映射。
虚拟数据如下:
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,但失败了。
总的来说,我所做的似乎效率很低,应该有一种适当的方法来实现从单个 data.table 递归扩展为元素略有改变的 data.tables 列表。
如果可以为每个 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)
【问题讨论】:
标签: r dataframe data.table