data.table通过引用在函数内分配

时间:2015-06-02 16:16:50

标签: r reference data.table

我有一个(大事)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是一个写在包中的函数。这有所不同

1 个答案:

答案 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在其帖子中列出的第一个选项 - 可能更加万无一失。