base::get 函数只在 R CMD 检查 R-package --as-cran 下得到对象未找到错误

base::get function got object not found error ONLY under R CMD check R-package --as-cran

如果通过 source 命令调用,以下代码可以完美运行。它是一个函数的一部分,其中 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 

你为什么要使用 get

无需承担开销....

which(bst.cv[[lab]] == min(bst.cv[[lab]]))