【发布时间】:2018-08-31 01:24:39
【问题描述】:
我在尝试使 if else 语句正常工作时遇到了麻烦。本质上,我想要它做的事情如下:如果我的对象 (z) 存在然后附加到我的数据框(结果
以下是我正在尝试完成的可重现示例:
可重现的例子
library(forecast)
set.seed(1234)
testData <- rnorm(1000)
mFits <- function(data, mod1, mod2 = NULL, mod3 = NULL) {
# Must at least choose one model to evaluate
# If mod2, mod3 are specified in the arguments then evaluate
m1 <- mod1(data)$fitted
if (!is.null(mod2)) {
m2 <- mod2(data)$fitted
}
if (!is.null(mod3)){
m3 <- mod3(data)$fitted
}
# Put fitted values into a data frame
if (!is.ts(m2)) {
fits <- data.frame(m1)
}
else {
fits <- data.frame(m1, m2)
}
if (!is.ts(m3)) {
fits <- data.frame(m1)
}
else {
fits <- data.frame(m1, m3)
}
}
modelFit <- mFits(testData, mod1 = auto.arima, mod2 = NULL, mod3 = NULL)
Error in is.ts(m3) : object 'm3' not found
但是,我不断收到错误消息,就像上面的错误一样。我知道 m3 不存在,因为我没有指定它存在。本质上,我想要的是一个数据框,它必须具有来自 m1 的拟合值,并且如果在函数的参数中指定它们,则可以选择附加来自 m2 和 m3 的拟合值。有人能指出我正确的方向吗?我有点不确定下一步该做什么。
谢谢
【问题讨论】:
-
除非
if (!is.null(mod3)){ }里面的代码被执行,否则m3不存在;m2也一样。需要修改您的测试以解决此问题。
标签: r function if-statement dataframe