data.table:=在R包与未打包的脚本中

时间:2018-01-11 18:02:31

标签: r data.table operators

我正在尝试编写一个包cleanstreets,其中包含我为自己编写的一些使用data.table的函数。

使用data.table的{​​{1}}运算符似乎在我的包函数中使用它时会抛出错误,但是如果我将代码剪切/粘贴到普通的旧R脚本中,或者甚至放入它在我在同一个脚本中定义的函数中,它工作正常。

例如,当我在R Studio中将其作为脚本运行时,在我尝试将该函数用作打包时,不会抛出任何错误...

:=

在包中我们有定义

rm(list = ls())
library(cleanstreets)
library(data.table)

DumbFunction <- function(char.vector) {
  library(data.table)
  dt <- data.table(original = as.character(char.vector))

  dt[,three := substr(original,1,3),]

  return (dt)
}

test.vec <- c("One Thing","Two Things","Three things")

dt <- data.table(original = test.vec)

dt[,three := substr(original,1,3),] # this doesn't throw an error

dt.from.local.function <- DumbFunction(test.vec)

dt.from.package.function <- DumbPackageFunction(test.vec)

只有最后一行才会抛出错误:

DumbPackageFunction <- function(char.vector) {
  library(data.table)
  print(search())

  dt <- data.table(original = as.character(char.vector))

  dt[,three := substr(original,1,3),]

  return (dt)
}

我觉得我错过了关于命名空间如何在包中工作的东西,但我不知道是什么,因为它似乎应该覆盖我Error in `:=`(three, substr(original, 1, 3)) : Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(":="). 6. stop("Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(\":=\").") 5. `:=`(three, substr(original, 1, 3)) 4. `[.data.frame`(x, i, j) 3. `[.data.table`(dt, , `:=`(three, substr(original, 1, 3)), ) at DumbPackageFunction.R#5 2. dt[, `:=`(three, substr(original, 1, 3)), ] at DumbPackageFunction.R#5 1. DumbPackageFunction(test.vec) 。我唯一的想法是,因为library(data.table)不是一个函数,命名空间规则在它的包(或其他运算符?)中的工作方式不一样。

但是当我:=内的print(search())时,我看到DumbPackageFunction()

data.table

0 个答案:

没有答案