Я работаю над проблемой, когда мне нужно подогнать множество аддитивных моделей вида y ~ s(x)
, где ответ y
постоянен, тогда как предсказатель x
варьируется в зависимости от модели.Я использую mgcv::smoothCon()
, чтобы настроить базы, и lm()
, чтобы соответствовать моделям.Причина, по которой я это делаю, вместо того, чтобы звонить gam()
напрямую, заключается в том, что мне нужны непенализованные припадки.Моя проблема в том, что smoothCon()
требует, чтобы аргумент object
был не заключен в кавычки, например, s(x)
, и мне интересно, как я могу генерировать такие аргументы без кавычек из символьного вектора имен переменных.
Минимальный примерможно проиллюстрировать с помощью набора данных mtcars
.Следующий фрагмент показывает, что я могу сделать в данный момент:
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