获取一个调用对象,更改参数并使用新参数再次运行它

时间:2014-08-24 19:31:34

标签: r machine-learning call dynamically-generated random-forest

我有一个从随机森林生成的模型。在其中,有一个名为call的属性,它将为我提供实际上名为randomForest的函数。

我想获取此参数,从模型中删除一列并再次运行。

例如:

library(randomForest)
data(iris)
iris.rf <- randomForest(Species~.-Sepal.Length,  data=iris, prox=TRUE)
iris.rf$call

# want to remove the field Sepal.length as well
# the call should be then 
# randomForest(Species~.-Sepal.Length-Sepal.Width,  data=iris, prox=TRUE)

我已尝试转换为列表,粘贴新参数,然后再将其添加到iris.rf [[2]],但它粘贴在公式的所有部分中。

我无法摆脱类调用,更改它,然后调用eval()再次运行它。

1 个答案:

答案 0 :(得分:0)

您可以在parse对象上使用paste0来获取新表达式。然后,您可以将该新对象评估为呼叫。

也许是这样的:

> iris.rf$call[[2]][3] <- parse(text = with(iris.rf, {
      paste0(call[[2]][3], " - ", rownames(importance)[1])
  }))
> eval(iris.rf$call)
#
# Call:
#  randomForest(formula = Species ~ . - Sepal.Length - Sepal.Width,      
#               data = iris, prox = TRUE) 
#                Type of random forest: classification
#                      Number of trees: 500
# No. of variables tried at each split: 1
#
#         OOB estimate of  error rate: 3.33%
# Confusion matrix:
#            setosa versicolor virginica class.error
# setosa         50          0         0        0.00
# versicolor      0         47         3        0.06
# virginica       0          2        48        0.04

请注意,eval(parse(text = ...))不是推荐的内容,尽管它可以很好地完成这项工作。