You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言RSA包循环执行响应面分析报错问题求助

问题:RSA包在for循环中使用字符串公式无法运行,lm函数却正常

我用R的RSA包做响应面分析,直接指定因变量的代码能正常运行:

library(RSA)

dat <- iris

lm(Petal.Length~Sepal.Length*Sepal.Width, data=dat)
RSA(Petal.Length~Sepal.Length*Sepal.Width, data=dat)

lm(Petal.Width~Sepal.Length*Sepal.Width, data=dat)
RSA(Petal.Width~Sepal.Length*Sepal.Width, data=dat)

但改用for循环遍历数据框第3、4列作为因变量时,lm能正常运行,RSA却报错:

for(i in 3:4){
  
  model1 <- lm(paste0(colnames(dat[i]),"~ Sepal.Length*Sepal.Width"), data=dat) # 正常运行
  model2 <- RSA(paste0(colnames(dat[i]),"~ Sepal.Length*Sepal.Width"), data=dat) # 无法运行
  
  out <- list(model1, model2)
  print(out)
}

甚至单独执行时,字符串形式的公式也会失败,而直接写公式对象却正常:

i=3
RSA(paste0(colnames(dat[i]),"~ Sepal.Length*Sepal.Width"), data=dat) # 失败
 
RSA(Petal.Length~Sepal.Length*Sepal.Width, data=dat) # 正常

原因分析

lm函数内部会自动将传入的字符串转换为公式对象(formula),但RSA函数的formula参数只接受公式对象,不支持直接传入字符串,所以会报错。


解决方法

将拼接好的字符串公式用as.formula()转换为公式对象后,再传入RSA函数即可。修改后的代码如下:

library(RSA)
dat <- iris

for(i in 3:4){
  # 拼接公式字符串并转换为公式对象
  formula_str <- paste0(colnames(dat[i]), "~ Sepal.Length*Sepal.Width")
  formula_obj <- as.formula(formula_str)
  
  model1 <- lm(formula_obj, data=dat)
  model2 <- RSA(formula_obj, data=dat)
  
  out <- list(model1, model2)
  print(out)
}

单独测试的代码也可以修改为:

i=3
formula_obj <- as.formula(paste0(colnames(dat[i]),"~ Sepal.Length*Sepal.Width"))
RSA(formula_obj, data=dat) # 正常运行

内容的提问来源于stack exchange,提问作者Tube

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:43:15