【发布时间】:2019-01-22 10:15:40
【问题描述】:
我正在解决一个问题,我需要拟合许多 y ~ s(x) 形式的加法模型,其中响应 y 是恒定的,而预测变量 x 在每个模型之间变化。我正在使用mgcv::smoothCon() 来设置基础,并使用lm() 来适应模型。我之所以这样做,而不是直接调用gam(),是因为我需要不受惩罚的配合。我的问题是 smoothCon() 要求 object 参数不被引用,例如 s(x),我想知道如何从变量名的字符向量生成这样的不带引号的参数。
可以使用mtcars 数据集来说明一个最小示例。以下 sn-p 显示了我目前能够做的事情:
library(mgcv)
# Variables for which I want to create a smooth term s(x)
responses <- c("mpg", "disp")
# At the moment, this is the only solution which I am able to make work
bs <- list(
smoothCon(s(mpg), data = mtcars),
smoothCon(s(disp), data = mtcars)
)
如果能够使用一些函数式编程方法生成bs 会更好。我想像这样,foo() 是我缺失的链接:
lapply(paste0("s(", responses, ")"), function(x) smoothCon(foo(x),
data = mtcars))
我尝试过noquote() 和as.symbol(),但都失败了。
responses <- c("mpg", "disp")
lapply(paste0("s(", responses, ")"),
function(x) smoothCon(noquote(x), data = mtcars))
#> Error: $ operator is invalid for atomic vectors
lapply(paste0("s(", responses, ")"),
function(x) smoothCon(as.symbol(x), data = mtcars))
#> Error: object of type 'symbol' is not subsettable
【问题讨论】: