R函数仅在通过我的包调用时失败
我正在为工作创建一个包(称为mypackage),并且有一个我希望包含在其中的函数。当我这样称呼它时,这个函数似乎工作得非常好: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
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
”是包的命名空间文件中的includeimport(data.table)
。我从未接触过我的命名空间文件。我刚打开它,它说。我只是尝试将其添加到导入:。。。在描述文件中,它不起作用..是clusterExport需要将varlist
,而不是list
作为其参数吗?@jeremycg,我已经尝试过了。我还试着把它作为一个字符向量(这似乎是大多数人的做法)。我不知道为什么你要把它添加到描述
文件中,当我说名称空间
一个时。暗中拍摄的“我看到你在使用数据.table
”是include导入(data.table)
在包的命名空间
文件中。我从未接触过我的命名空间文件。我刚打开它,它说。我只是尝试将其添加到导入:。。。在描述文件中,它不起作用..是clusterExport需要将varlist
,而不是list
作为其参数吗?@jeremycg,我已经尝试过了。我也试着把它作为一个字符向量(这似乎是大多数人的做法)。我不知道你为什么要把它添加到描述
文件中,当我说名称空间
一个时。谢谢。我感谢你迅速的回答。现在我需要阅读更多关于名称空间文件的内容。这是我第一次碰它。谢谢。我感谢你迅速的回答。现在我需要阅读更多关于名称空间文件的内容。这是我第一次碰它。