如果我想爲函數的參數錯誤或警告執行deparse,如果參數轉換爲data.table功能:在使用data.table作爲參數的函數中使用deparse(substitute())
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
如果我deparse之前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
@nachti,這不是回答你的問題嗎? – BrodieG
@ [BrodieG](http://stackoverflow.com/users/2725969/brodieg):謝謝你的回答。如上所述:如何處理'data.frame'和'data.table'輸入的這些函數?我應該複製它(需要很多空間)嗎?或者先把所有東西先抹掉,然後覆蓋它? – nachti
@ nachti,後者,先貶低。另外,如果你想避免拷貝,你應該考慮使用'setDT'而不是'data.table'。前者通過引用創建數據表。 – BrodieG