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

Hen*_*enk 14 r data.table

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

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

包中的任何函数都没有require(data.table)或库(data.table).DESCRIPTION文件包含:Imports:data.table.所以在我自己的包中使用data.table包是满意的.

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
Run Code Online (Sandbox Code Playgroud)

功能:

#' 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)
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*wle 14

文本

import(data.table)

需要在空间文件以及 data.table在被Imports:在说明字段字段.我编辑了链接的问题并更新了常见问题6.9.
在我自己的包中使用data.table包

另外,在RStudio中要注意"使用Roxygen构建NAMESPACE文件"选项并查看:
roxygen2是否会自动为"Imports:"包编写NAMESPACE指令?


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

不确定,但包装的描述包含:

...
Version: 1.0
Date: 2014-06-23
Imports:
    data.table
Author: Henk
Description: utility functions
...
Run Code Online (Sandbox Code Playgroud)

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

...
Version: 1.0
Date: 2014-06-23
Imports: data.table
Author: Henk
Description: utility functions
...
Run Code Online (Sandbox Code Playgroud)

  • 确实是 - 一切都是用 devtools/roxygen 完成的。我已经关闭了配置下的选项:“使用 Roxygen 来构建 NAMESPACE 文件”。现在,如果我在 NAMESPACE 中添加 import(data.table) 它仍然存在。如果我有 Imports: data.table in DESCRIPTION 和 import: data.table in NAMESPACE 一切正常。到目前为止的结论:要么取决于:描述中的 data.table,*或 * 关闭 NAMESPACE 的 roxygen 并在描述中包含 Imports:data.table *和 NAMESPACE 中的导入(data.table)。到达那里!噗... (2认同)