R函数仅在通过我的包调用时失败

R函数仅在通过我的包调用时失败,r,parallel-processing,data.table,roxygen2,R,Parallel Processing,Data.table,Roxygen2,我正在为工作创建一个包(称为mypackage),并且有一个我希望包含在其中的函数。当我这样称呼它时,这个函数似乎工作得非常好: myFunction() mypackage::functionName() 但是,当我这样称呼它时,它失败了: myFunction() mypackage::functionName() 我正在使用roxygen2构建我的包。函数如下所示: volumeDiffBoot.test <- function(screenedData, B=100, re

我正在为工作创建一个包(称为mypackage),并且有一个我希望包含在其中的函数。当我这样称呼它时,这个函数似乎工作得非常好:

myFunction()
mypackage::functionName()
但是,当我这样称呼它时,它失败了:

myFunction()
mypackage::functionName()
我正在使用roxygen2构建我的包。函数如下所示:

volumeDiffBoot.test <- function(screenedData, B=100, recSetting=c(80, 6), 
                                curSetting=c(80, 6), numCore=3){
  inputStrings <- unique(screenedData$ID)
  cl <- makeCluster(numCore)
  # must pass all relevant variables to the worker nodes: 
  clusterExport(cl, list=c("inputStrings", "B", "screenedData", "curSetting", "recSetting"), 
                envir=environment())
  clusterEvalQ(cl, library(data.table))
  # change the data.frame to a data.table (MUCH faster this way)
  b <- as.data.table(screenedData)
  setkey(b, ID) # set the key for faster subsetting
  # bootstrap sampling of volume differences:
  bootSamples <- parLapply(cl, as.matrix(1:B), function(i){
    bootSample1 <- sample(inputStrings, replace=TRUE)
    bootSample2 <- sample(inputStrings, replace=TRUE)
    numHits <- lapply(1:length(bootSample1), function(j){
      # subsets the data by ID first using data.table key (much faster this way): 
      d1 <- b[list(bootSample1[j])]
      # return the number of rows meeting the accuracy and variation conditions: 
      curHits <- d1[accuracy >= curSetting[1] & numVariation <= curSetting[2], .N]

      d2 <- b[list(bootSample2[j])]
      recHits <- d2[accuracy >= recSetting[1] & numVariation <= recSetting[2], .N]
      return(c(curHits, recHits))
    })
    q <- do.call(rbind, numHits)
    return(sum(q[,1]) - sum(q[,2]))
  })
  stopCluster(cl) # close the cluster
  bootSamples <- unlist(bootSamples)
  cat("If the following confidence interval contains zero, the difference in volume is not significant.\n")
  print(quantile(bootSamples, c(0.025, 0.975)))
  return(bootSamples)
}
通过包调用时引发的错误为:

> d <- mypackage::volumeDiffBoot.test(myDat, B=3, recSetting = c(88, 2), curSetting = c(80, 6))
Error in checkForRemoteErrors(val) : 
  3 nodes produced errors; first error: invalid subscript type 'list'

>d在添加错误消息后,继续我的评论:

导入(data.table)
包含在包的
命名空间
文件中,在
行下方,并重建包等

我也有类似的问题。您会注意到错误是在谈论一个
列表
,当您使用
数据表
语法
b[list(bootSample1[j])]
——也就是说,从包中调用函数时语法是错误的(我肯定这里的术语是错误的,但这只是我不太理解这个问题的一个迹象)

通过名称空间导入
data.table
为我解决了这个问题

更具体地说,我是通过
data.table
得到这个答案的

6.9 我创建了一个依赖于data.table的包。我该怎么办 确保我的包是data.table-aware,以便从 数据框架工程

或者 i) 在描述文件的Depends:字段中包含data.table,或ii)包含 导入:描述文件的字段中的data.table和 名称空间文件


继续我的评论,现在您添加了错误消息:

导入(data.table)
包含在包的
命名空间
文件中,在
行下方,并重建包等

我也有类似的问题。您会注意到错误是在谈论一个
列表
,当您使用
数据表
语法
b[list(bootSample1[j])]
——也就是说,从包中调用函数时语法是错误的(我肯定这里的术语是错误的,但这只是我不太理解这个问题的一个迹象)

通过名称空间导入
data.table
为我解决了这个问题

更具体地说,我是通过
data.table
得到这个答案的

6.9 我创建了一个依赖于data.table的包。我该怎么办 确保我的包是data.table-aware,以便从 数据框架工程

或者 i) 在描述文件的Depends:字段中包含data.table,或ii)包含 导入:描述文件的字段中的data.table和 名称空间文件


黑暗中拍摄的“我看到您正在使用
数据.table
”是包的
命名空间文件中的include
import(data.table)
。我从未接触过我的命名空间文件。我刚打开它,它说。我只是尝试将其添加到导入:。。。在描述文件中,它不起作用..是clusterExport需要将
varlist
,而不是
list
作为其参数吗?@jeremycg,我已经尝试过了。我还试着把它作为一个字符向量(这似乎是大多数人的做法)。我不知道为什么你要把它添加到
描述
文件中,当我说
名称空间
一个时。暗中拍摄的“我看到你在使用
数据.table
”是include
导入(data.table)
在包的
命名空间
文件中。我从未接触过我的命名空间文件。我刚打开它,它说。我只是尝试将其添加到导入:。。。在描述文件中,它不起作用..是clusterExport需要将
varlist
,而不是
list
作为其参数吗?@jeremycg,我已经尝试过了。我也试着把它作为一个字符向量(这似乎是大多数人的做法)。我不知道你为什么要把它添加到
描述
文件中,当我说
名称空间
一个时。谢谢。我感谢你迅速的回答。现在我需要阅读更多关于名称空间文件的内容。这是我第一次碰它。谢谢。我感谢你迅速的回答。现在我需要阅读更多关于名称空间文件的内容。这是我第一次碰它。