base :: get function got object not found错误只在R CMD检查R-package --as-cran下

时间:2015-09-07 05:59:56

标签: r get package data.table xgboost

如果源命令调用,以下代码可以很好地工作。它是函数的一部分,其中xgb.metric.label是一个形式参数,在运行时可以使用"rmsle"之类的值进行定值。 bst.cvdata.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 

1 个答案:

答案 0 :(得分:0)

你为什么要使用get

没有必要承担开销......

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