r-在for循环中调用函数时的默认值



假设我想在函数(例如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)}

您可以使用formals查找该值,它会为您提供一个包含所有默认值的列表。但它也有自己的一系列问题,因为并非所有函数都以完全相同的方式处理事情。

第一个问题在您的示例中变得很清楚:formals(randomForest)只为您提供x...,两者都没有默认值。这是因为randomForest是一个泛型方法,它接受基于第一个类的不同参数。要获得ntree的默认值,您需要

formals(randomForest:::randomForest.default)$ntree

我能想到的更多问题:

  • 可能甚至不清楚什么是缺失值或默认值。见过somedataframe[1]somedataframe[1,]somedataframe[,1]之间的区别吗?默认值是什么
  • 在函数中被赋予另一个值的可选参数呢?以情节为例:如果不指定任何内容,它会生成自己的标题。但"默认"标题是什么
  • 对于某些函数,参数的来源和求值位置存在差异。在处理环境时,这一点尤其重要,因此match.call()match.call在所有参数都按默认值填充的情况下,将产生不同的结果

所以综合起来,我认为你最好在环路外打电话,或者用if ... else打电话

你不能真的在R中传递"丢失"的参数值。如果你想确保默认值包含在你正在迭代的东西的列表中,我建议

values <- unique(c(100, 200, formals(randomForest:::randomForest.default)$ntree))
for (i in valies){
randomForest(Predictor ~., data = train, ntree = i)}

在这里,我们只是在函数上使用formals()来获得默认值,而我使用unique()来确保该值没有被包括在内。

只是将其添加到组合中,因为我有点喜欢它简单易读,就像一个选项:

for (i in c(100,200,NA)){
if (is.na(i)){ 
randomForest(Predictor ~., data = train)
} else{
randomForest(Predictor ~., data = train,ntree = i)
}
}

最新更新