0

如果通过 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 
4

1 回答 1

0

你为什么要使用get

没有必要招致开销....

which(bst.cv[[lab]] == min(bst.cv[[lab]]))
于 2015-09-07T06:33:26.297 回答