我有一个(大事)data.table
。我想对它的许多专栏做同样的事情。说,
dt <- data.table( ltr = letters[1:5] )
func <- function( dt ){
cols <- colnames( dt ) # Columns to apply op to
dt[ , (cols) := lapply( .SD, toupper ), .SDcols = cols ]
return( dt )
}
函数func
将所有列的字符转换为大写。我试试
func( dt )
我收到错误
Error in `:=`((cols), lapply(.SD, toupper)) :
Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(":=").
我仍然不确定导致错误的原因并且已阅读help(":=")
,常见问题解答和其他一些(SO)来源。有什么帮助吗?
注意:我应该提供有关上下文的更多详细信息。 func
是一个写在包中的函数。这有所不同
答案 0 :(得分:1)
简短的回答是make sure the package is data.table aware。请参阅@ Arun的评论。
请注意,使用devtools::use_package( "data.table", pkg = "." )
将添加到Imports
中的DESCRIPTION
字段,但不会在NAMESPACE中明确import( data.table )
。因此,在data.table
字段中包含Depends
- 这是Matthew在其帖子中列出的第一个选项 - 可能更加万无一失。