【发布时间】:2014-05-09 11:31:00
【问题描述】:
如果我想为错误或警告解析函数的参数,如果参数在函数内转换为 data.table,就会发生奇怪的事情:
e <- data.frame(x = 1:10)
### something strange is happening
foo <- function(u) {
u <- data.table(u)
warning(deparse(substitute(u)), " is not a data.table")
u
}
foo(e)
## foo(e)
## x
## 1: 1
## 2: 2
## 3: 3
## 4: 4
## 5: 5
## 6: 6
## 7: 7
## 8: 8
## 9: 9
## 10: 10
## Warning message:
## In foo(e) :
## structure(list(x = 1:10), .Names = "x", row.names = c(NA, -10L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x10026568>) is not a data.table
如果我在data.table 之前解析它一切正常:
### ok
foo1 <- function(u) {
nu <- deparse(substitute(u))
u <- data.table(u)
warning(nu, " is not a data.table")
u
}
## foo1(e)
## x
## 1: 1
## 2: 2
## 3: 3
## 4: 4
## 5: 5
## 6: 6
## 7: 7
## 8: 8
## 9: 9
## 10: 10
## Warning message:
## In foo1(e) : e is not a data.table
顺便说一句,e 是否已经是 data.table 没有区别。
我在分析一些代码时故意发现了它,其中deparse 非常耗时,因为e 很大。
这里发生了什么,我该如何处理 data.frame 和 data.table 输入的此类函数?
nachti
【问题讨论】:
标签: r data.table substitution