我有一个函数可以使用:=
- 运算符将XML文档解析为data.table。当我从解析器函数返回data.table时,第一次调用结果时没有显示任何内容,只有第二次调用才会创建我想要的输出。
我怀疑它与data.table评估作业的方式有关。我现在的问题是:如何避免第一个空调用(也就是说,如何强制data.table来计算表达式)?
举一个小例子:
my_fun <- function() {
dt <- data.table(x = 1)
dt[, y := 2]
return(dt)
}
my_dt <- my_fun()
my_dt
# ... nothing happens
my_dt
# x y
# 1: 1 2
一种可能的解决方案是在函数内调用copy
,但我不确定这是否是data.table-处理方式(关于速度和内存使用)。一个例子是:
my_fun2 <- function() {
dt <- data.table(x = 1)
dt[, y := 2]
dt <- copy(dt)
return(dt)
}
my_dt2 <- my_fun2()
my_dt2
# x y
# 1: 1 2