我有一个从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)
}
答案 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
...