data.table函数在脚本中工作,但不在包中

时间:2014-06-24 07:03:28

标签: r data.table

我有一个从data.table中删除空列的函数,并将其包含在一个包中。

不知何故,当我加载函数时,它可以工作,但是当我从包中调用它时,它不起作用。 问题:当我从包中调用它时,为什么不运行此函数?

包中的任何函数都没有require(data.table)或库(data.table)。 DESCRIPTION文件包含:Imports:data.table。 所以Using data.table package inside my own package很满意。

library(data.table)
df = data.table(a = c(1,2,3), b = c(NA, NA, NA), c = c(4,5,6))
library(cr360)

remove.emptycols(df) # from package
Error in .subset(x, j) : invalid subscript type 'list'

# now open function from mypackage and run again:
# source("./mypackage/R/fun_remove_emptycols.R")
remove.emptycols(df)
   a c
1: 1 4
2: 2 5
3: 3 6

功能:

#' Remove empty columns
#' 
#' Counts the number of NA values in the columns and counts the number of rows.
#' @param df
#' @return df data.table with empty columns removed.
#' @export
#' 
#' 
remove.emptycols = function(df) {

count.colNA = df[,lapply(.SD, function(x) sum(is.na(x)))] 
df = df[,which(count.colNA != nrow(df)),with = FALSE]  

return(df)
}

1 个答案:

答案 0 :(得分:14)

文字

import(data.table)

需要位于描述字段的data.table字段中的NAMESPACE文件以及 Imports:中。我已编辑了相关问题并更新了常见问题解答6.9 Using data.table package inside my own package

另外,在RStudio中要注意选项"使用Roxygen构建NAMESPACE文件"并看到:
Does roxygen2 automatically write NAMESPACE directives for "Imports:" packages?


以前的红鲱鱼为后代保留......

不确定,但您的包裹说明包含:

...
Version: 1.0
Date: 2014-06-23
Imports:
    data.table
Author: Henk
Description: utility functions
...

尝试删除换行符,而不是:

...
Version: 1.0
Date: 2014-06-23
Imports: data.table
Author: Henk
Description: utility functions
...