使用 purrr 和 caret 遍历列进行回归
loop over columns for regression using purrr and caret
我正在尝试使用 purrr 和插入符号循环回归,但我无法通过争论。
# sample dataframe
foo <- data.frame(y1 = runif(10),
y2 = runif(10),
y3 = runif(10),
x1 = runif(10),
x2 = runif(10),
x3 = runif(10)
)
# list of dependent and independent variables
Yvars <- c("y1","y2","y3")
Xvars <- c("x1","x2","x3")
# library(caret)
# custom caret function to loop over vars
caretlm <- function(xvars, yvars, data) {
set.seed(1123)
lmFitTest <- train(x = eval(substitute(xvars)), y = eval(substitute(yvars)), data = data,
method = "lm",
trControl = trainControl(method = "cv")
)
}
# library(purrr)
modellist_lm <- map2(xvars, yvars, ~caretlm(.x, .y, foo) )
# Error in eval(substitute(xvars)) : object '.x' not found
当我不使用 eval 和 substitute 时,我会得到另一个错误
caretlm2 <- function(xvars, yvars, data) {
set.seed(1123)
lmFitTest <- train(x = xvars, y = yvars, data = data,
method = "lm",
trControl = trainControl(method = "cv")
)
}
modellist_lm <- map2(xvars, yvars, ~caretlm2(.x, .y, foo) )
# Error: Please use column names for `x`
如有更好的方法或框架请指教..
不确定 x, y 方法,但该函数有一个公式方法,在我看来更容易使用(请注意,我将 Data
更改为 data
)
caretlm <- function(xvars, yvars, data) {
set.seed(1123)
lmFitTest <- train(reformulate(xvars, yvars), data = foo,
method = "lm",
trControl = trainControl(method = "cv")
)
}
modellist_lm <- map2(Xvars, Yvars, ~caretlm(.x, .y, foo))
我正在尝试使用 purrr 和插入符号循环回归,但我无法通过争论。
# sample dataframe
foo <- data.frame(y1 = runif(10),
y2 = runif(10),
y3 = runif(10),
x1 = runif(10),
x2 = runif(10),
x3 = runif(10)
)
# list of dependent and independent variables
Yvars <- c("y1","y2","y3")
Xvars <- c("x1","x2","x3")
# library(caret)
# custom caret function to loop over vars
caretlm <- function(xvars, yvars, data) {
set.seed(1123)
lmFitTest <- train(x = eval(substitute(xvars)), y = eval(substitute(yvars)), data = data,
method = "lm",
trControl = trainControl(method = "cv")
)
}
# library(purrr)
modellist_lm <- map2(xvars, yvars, ~caretlm(.x, .y, foo) )
# Error in eval(substitute(xvars)) : object '.x' not found
当我不使用 eval 和 substitute 时,我会得到另一个错误
caretlm2 <- function(xvars, yvars, data) {
set.seed(1123)
lmFitTest <- train(x = xvars, y = yvars, data = data,
method = "lm",
trControl = trainControl(method = "cv")
)
}
modellist_lm <- map2(xvars, yvars, ~caretlm2(.x, .y, foo) )
# Error: Please use column names for `x`
如有更好的方法或框架请指教..
不确定 x, y 方法,但该函数有一个公式方法,在我看来更容易使用(请注意,我将 Data
更改为 data
)
caretlm <- function(xvars, yvars, data) {
set.seed(1123)
lmFitTest <- train(reformulate(xvars, yvars), data = foo,
method = "lm",
trControl = trainControl(method = "cv")
)
}
modellist_lm <- map2(Xvars, Yvars, ~caretlm(.x, .y, foo))