data.table [, - c(...)]在包

时间:2017-04-09 06:58:42

标签: r data.table

UPD。感谢@RYoda,我发现我忘记在import(data.table)文件中添加NAMESPACE。但是,即使没有data.table,我仍然无法理解为什么所有其他import()函数调用都能正常工作,如果有人能够解释它,我将不胜感激。

在我的包中,我定义了一个函数,除其他外,还从data.table中排除了一些列。我可以用不同的方式定义它:

# code in the package: \testexcl\R\test_exclude.R

test_exclude_col1 <- function(inpDT,col2excl){
  output <- inpDT[, -c(col2excl), with=F]
  invisible(output)
}

test_exclude_col2 <- function(inpDT,col2excl){
  output <- inpDT[, setdiff(names(inpDT), col2excl), with=F]
  invisible(output;
}
然后我可以使用这样的函数:

require(data.table)
require(testexcl) # my package
dt.iris <- data.table(iris)
dt.1 <- test_exclude_col1(dt.iris, 'Species') # Error
dt.2 <- test_exclude_col2(dt.iris, 'Species') # OK

test_exclude_col2()按预期工作,test_exclude_col1()引发错误Error in -c(col2excl) : invalid argument to unary operator。让我最困惑的是,如果我在包中但不是在我的会话中定义完全相同的test_exclude_col1()代码,它就能正常工作。为什么会这样?

我在R版本3.3.3(2017-03-06),Win10 x86_64-w64-mingw32 / x64,data.table_1.10.4,tools_3.3.3

P.S。为了确保我正在使用data.table,我已将此部分添加到包中:

test_exclude_col1a <- function(inpDT,col2excl){
  print(class(inpDT));
  inpDT <- data.table(inpDT);
  output <- inpDT[, -c(col2excl), with=F]
  invisible(output);
}

当我拨打test_exclude_col1a(dt.iris, 'Species')时,会打印[1] "data.table" "data.frame",然后会出现同样的错误。

1 个答案:

答案 0 :(得分:0)

要在您的包中使用var start = $scope.currentPage * $scope.pageSize; var end = start + $scope.pageSize; $scope.resultsToDelete = $scope.results.slice( start, end ); 功能,您必须

  1. 声明包依赖项,以便安装data.table包 尚不存在(例如,通过data.table文件中的Imports:)和
  2. 将所需的功能导入您的包中(使用DESCRIPTION file =&gt; import()
  3. 中的NAMESPACE功能

    有关更多背景信息,请参阅: