【发布时间】:2014-08-14 08:16:33
【问题描述】:
我有一个函数可以从 data.table 中删除空列,并将其包含在一个包中。
当我加载函数时它以某种方式工作,但当我从包中调用它时却不行。 问题:当我从包中调用它时,为什么这个函数不运行?
包中的任何函数中都没有 require(data.table) 或 library(data.table)。描述文件包含:导入: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)
}
【问题讨论】:
-
奇怪。您是否使用新的说明文件重建了您的包并重新安装了您的包?
-
我做到了。还尝试了模块包 [更多类似 python 的模块方法替代包],结果相同。构建并重新加载包。构建并重新启动 R:相同的结果。我现在只是在一个新的命名空间中加载函数:utils = new.env(), source(utils$remove.emptycols = function ....这很好。
-
哦。请粘贴
sessionInfo()、packageVersion("data.table")的结果,你的包有NAMESPACE 文件吗? -
长输出,所以这里是文件:copy.com/4hN8Mm1LyrpHcopy.com/q7SQFqLqjfhm
-
似乎有一个换行符:
Imports: \n data.table。删除它,使该字段为一行,重新构建,重新安装并重试。
标签: r data.table