如何从函数返回对象,而不是调用对象时提供的输出?

best.mod <- function(d){
  m1 <- lm(Sepal.Length~Sepal.Width, d)
  m2 <- lm(Sepal.Length~Sepal.Width + I(Sepal.Width^2), d)
  ifelse(AIC(m1) < AIC(m2), m1, m2)
}

mod <- best.mod(iris[iris$Species == "setosa",])
class(mod)

最佳答案

问题来自使用ifelse。这是用于矢量化比较。标准的if ... else在这里更好:

best.mod <- function(d){
  m1 <- lm(Sepal.Length~Sepal.Width, d)
  m2 <- lm(Sepal.Length~Sepal.Width + I(Sepal.Width^2), d)
  if(AIC(m1) < AIC(m2)) return(m1) else return(m2)
}

mod <- best.mod(iris[iris$Species == "setosa",])
class(mod)
[1] "lm"

注意?ifelse中的警告:

结果的模式可能取决于测试的值(请参见
示例),结果的class属性(请参见oldClass)为
取自测试,可能不适用于从中选择的值
是的,没有。

关于r - 从函数返回对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20824102/

10-12 20:52