我有一个从随机森林生成的模型。在其中,有一个名为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()再次运行它。
答案 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 = ...))
不是推荐的内容,尽管它可以很好地完成这项工作。