如果我想解析函数的参数以便于处理错误或警告,但是当函数内部参数转换为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
data.frame
和data.table
输入的这些函数?我应该复制它(需要很多空间)吗?还是先解析一切,然后再覆盖它? - nachtisetDT
而不是data.table
。前者通过引用创建数据表。 - BrodieGdelayedAssign("u", data.table(u))
代替u<-data.table(u)
? - Aaron McDaid警告:data.table(e) 不是一个 data.table
。 - BrodieGdata.table(u)
,而我猜问者想要的是data.table(e)
或者只是e
。 - Aaron McDaid