r - 将变化的 for 循环变量插入模型公式

标签 r function loops variables runtime-error

我有以下功能:

sincos.chooser <- function(mod,min,max) {
  my.aic.sincos <- matrix(NA, ncol=2, nrow=max)
  for(k in c(min:max)) { 
    sincos.update <- update(mod, .~. + I(cos(2*pi/k*(order.ID))) + I(sin(2*pi/k*(order.ID))))
    my.aic.sincos[k,] <- c(k,AIC(sincos.update))
  }
  my.aic.sincos
}

但是当我运行该函数时,出现以下错误:

Error in get("k") : object 'k' not found

如何在循环的更新函数中识别变化的变量k

我假设这里的问题是更新函数假设“k”是我的 data.frame 中的列名,因此无法找到该对象。我希望它将“k”视为变量,而不是参数名称。


更新:我尝试使用 get('k') 代替“k”。如果我将 update 函数移到“sincos.chooser”函​​数之外,则此方法有效,但在我的函数内部使用时会产生与上面相同的错误。


对于那些想查看我的数据和模型的人:

原始模型:

gls(GDD ~ year + pdo, data = dat)

我的数据格式:

> dat
    year month   temp.avg   ppt.avg       GDD   pdo  order.ID
1   1922     1  0.4935484 0.3535484  14.40737 -0.45         1
2   1923     2  4.3892857 0.4542857  56.03017 -1.51         2
3   1924     3  7.3032258 0.5435484 106.49244 -1.76         3
4   1925     4 12.8533333 0.2583333 239.07739 -1.71         4
5   1926     5 19.7903226 0.4667742 458.50000 -1.61         5
6   1927     6 24.2766667 0.3146667 578.30000 -1.11         6

最佳答案

这不是完成这项工作的最巧妙的方法,但它一个解决方案:

使用公式paste0:

sincos.update <- update(mod, formula(paste0('.~. + I(cos(2*pi/',k,'*(order.ID))) + I(sin(2*pi/',k,'*(order.ID)))')))

关于r - 将变化的 for 循环变量插入模型公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36088529/

相关文章:

r - 在 R 中使用线性(或非线性?)约束优化值

r - 如何操作或转置数据集以便在 R 或 SPSS 中使用

在 R 中运行指定时间的函数

C++ 语法错误

c++ - 您可以传递一个函数以便稍后调用它吗?

javascript - 如果类和对象之间没有区别,为什么这段代码不起作用?

performance - 优化 VBA 中删除隐藏行的性能

r - 从 R 中的数字和字母列表中分离多个数字

c - omp parallel 用于输出顺序

php - 使用 PDO 更新 MySQL 记录,但数据包含破坏 SQL 语法的字符串