如果源命令调用,以下代码可以很好地工作。它是函数的一部分,其中xgb.metric.label
是一个形式参数,在运行时可以使用"rmsle"
之类的值进行定值。 bst.cv
是data.table
。
lab = paste('test.',xgb.metric.label,'.mean',sep='')
bst.cv = xgboost::xgb.cv(param=param, data = data, label = y,
nfold = nfold, nrounds=cv.nround , folds = foldList,
feval = xgb.metric.fun , maximize = xgb.maximize, verbose=FALSE)
if (verbose) print(bst.cv)
early.stop = which(bst.cv[,get(lab)] == bst.cv[,min(get(lab))] )
相反,当我通过R CMD check R-package --as-cran
调用此类代码时出现以下错误Error in get(lab) : object 'test.rmsle.mean' not found
。但是从标准输出中我可以很好地看到test.rmsle.mean
存在。
>> xgb: cross-validation ...
train.rmsle.mean train.rmsle.std test.rmsle.mean test.rmsle.std
1: 1.982000 0.047535 1.971343 0.257277
2: 1.957587 0.047260 1.947059 0.255464
3: 1.933816 0.046985 1.923421 0.253643
4: 1.910654 0.046711 1.900397 0.251813
5: 1.888074 0.046436 1.877959 0.249975
---
2996: 0.267519 0.072264 0.307539 0.239068
2997: 0.267531 0.072254 0.307413 0.239195
2998: 0.267425 0.072160 0.307183 0.239163
2999: 0.267488 0.072168 0.307137 0.239798
3000: 0.267476 0.072201 0.307264 0.239906
我试图在错误发生前将所有相关库调用为一行,但没有成功。
library(data.table)
library(xgboost)
library(methods)
我还在DESCRIPTION
文件的导入部分添加了这些库。再次,没有成功。
Imports:
parallel,
subselect,
plyr,
xgboost,
methods,
data.table
答案 0 :(得分:0)
你为什么要使用get
?
没有必要承担开销......
which(bst.cv[[lab]] == min(bst.cv[[lab]]))