【发布时间】:2020-01-22 14:25:13
【问题描述】:
我正在编写一个以 data.table 作为参数的函数。 data.table 的列名部分指定为参数,但并非所有列名都指定,所有原始列都需要维护。在函数内部,需要将一些列添加到 data.table 中。即使在函数内部复制了 data.table,我也想以一种保证不会覆盖现有列的方式添加这些列。鉴于列名未知,确保我不会覆盖列的最佳方法是什么?
这是一种方法:
#x is a data.table and knownvar is a column name of that data.table
f <- function(x,knownvar){
x <- copy(x)
tempcol <- "z"
while(tempcol %in% names(x))
tempcol <- paste0("i.",tempcol)
tempcol2 <- "q"
while(tempcol2 %in% names(x))
tempcol2 <- paste0("i.",tempcol2)
x[, (tempcol):=3]
eval(parse(text=paste0("x[,(tempcol2):=",tempcol,"+4]")))
x
}
请注意,即使我在这里复制 x,我仍然需要此过程以提高内存效率。有没有更简单的方法来做到这一点?可能不使用eval(parse(text=?
显然我可以在函数环境中创建一个局部变量(例如向量)(而不是将其显式添加为 data.table 的列),但如果我需要排序/加入数据表。另外,我可能想显式返回一个包含原始变量和新列的 data.table。
【问题讨论】:
标签: r data.table