假设我想在函数(例如randomForest)中使用for循环迭代不同的值
for (i in c(100, 200, 500)){
randomForest(Predictor ~., data = train, ntree = i)}
传递给randomForest函数的值之一是默认值(假设我不知道randomForest中ntree的默认值是500)
如何在for循环中指定它?
for (i in c(100,200, default)){
randomForest(Predictor ~., data = train, ntree = i)}
答案 0 :(得分:3)
您可以使用formals
查找值,这会为您提供一个包含所有默认值的列表。但这带来了一系列问题,因为并非所有函数都以完全相同的方式处理事物。
第一个问题在您的示例中显而易见:formals(randomForest)
仅给您x
和...
,两者都没有默认值。这是因为randomForest是通用方法,它根据第一个方法的类接受不同的参数。要获得ntree
的默认设置,您需要
formals(randomForest:::randomForest.default)$ntree
我能想到的更多问题:
somedataframe[1]
和somedataframe[1,]
或somedataframe[,1]
之间的区别?默认值是什么?match.call()
和match.call
的所有参数均按照默认值指定填充,将给出不同的结果。总而言之,我认为您最好将呼叫放在循环外,或者使用if ... else
答案 1 :(得分:2)
您不能真正在R中传递“缺失”参数值。如果您要确保默认值包含在要迭代的事物列表中,我建议
values <- unique(c(100, 200, formals(randomForest:::randomForest.default)$ntree))
for (i in valies){
randomForest(Predictor ~., data = train, ntree = i)}
在这里,我们只在函数上使用formals()
来获取默认值,而我使用unique()
来确保尚未包含该值。
答案 2 :(得分:2)
只需将其添加到混合中,因为我喜欢它简单易读,只是作为一种选择:
for (i in c(100,200,NA)){
if (is.na(i)){
randomForest(Predictor ~., data = train)
} else{
randomForest(Predictor ~., data = train,ntree = i)
}
}