R 如何用变量填充子集参数?
我想用一个变量作为subset参数,这样我就可以把它放到一个函数中R 如何用变量填充子集参数?,r,R,我想用一个变量作为subset参数,这样我就可以把它放到一个函数中 formula <- paste0(response_name, " ~ .") if (subset_filter != ""){ subset_filter <- "G3 < 10" model <-
formula <- paste0(response_name,
" ~ .")
if (subset_filter != ""){
subset_filter <- "G3 < 10"
model <-
lm(as.formula(formula),
subset = subset_filter,
data = train_dataset)
} else {
model <-
lm(as.formula(formula),
data = train_dataset)
}
公式如果我们需要传递一个字符串,那么我们可以parse
和eval
uate
library(caret)
library(readr)
create_model <- function(data, response_name, subset_filter) {
formula <- paste0(response_name, " ~ .")
if (subset_filter != ""){
model <-
lm(as.formula(formula),
subset = eval(parse(text = subset_filter), envir = data),
data = data)
} else {
model <-
lm(as.formula(formula),
data = data)
}
model$call <- as.formula(formula)
return(model)
}
库(插入符号)
图书馆(readr)
如果我们需要传递一个字符串,那么我们可以parse
和eval
评估
library(caret)
library(readr)
create_model <- function(data, response_name, subset_filter) {
formula <- paste0(response_name, " ~ .")
if (subset_filter != ""){
model <-
lm(as.formula(formula),
subset = eval(parse(text = subset_filter), envir = data),
data = data)
} else {
model <-
lm(as.formula(formula),
data = data)
}
model$call <- as.formula(formula)
return(model)
}
库(插入符号)
图书馆(readr)
create_model我得到错误`error in eval(parse(text=subset_filter),envir=data):无效的'closure'`@potato类型的'envir'参数根据您显示的数据我工作正常我得到错误`error in eval(parse(text=subset_filter),envir=data):无效的'closure'类型的'envir'参数,'@potato根据您显示的数据,它对我来说工作正常
library(caret)
library(readr)
create_model <- function(data, response_name, subset_filter) {
formula <- paste0(response_name, " ~ .")
if (subset_filter != ""){
model <-
lm(as.formula(formula),
subset = eval(parse(text = subset_filter), envir = data),
data = data)
} else {
model <-
lm(as.formula(formula),
data = data)
}
model$call <- as.formula(formula)
return(model)
}
create_model(train_dat, "G3", "G3 < 10" )
#Call:
#G3 ~ .
#Coefficients:
# (Intercept) schoolMS sexM age addressU famsizeLE3
# -4.42602 1.18145 0.15315 -0.16790 1.11708 -0.08173
# PstatusT Medu Fedu Mjobhealth Mjobother Mjobservices
# 1.32870 1.00518 -0.62716 -1.98356 -1.31388 -0.94443
# Mjobteacher Fjobhealth Fjobother Fjobservices Fjobteacher reasonhome
# -1.28718 0.03242 0.02968 0.32962 -1.53201 -2.10665
# reasonother reasonreputation guardianmother guardianother traveltime studytime
# -0.51770 0.22395 -0.29893 1.85975 -0.39072 -1.56920
# failures schoolsupyes famsupyes paidyes activitiesyes nurseryyes
# -0.17344 2.35607 0.35207 0.29857 -0.91373 0.09838
# higheryes internetyes romanticyes famrel freetime goout
# 1.06065 -0.58727 0.09469 0.69217 0.25081 0.14379
# Dalc Walc health absences G1 G2
# -1.39164 0.60450 0.86492 0.12033 0.11660 0.78624
split_sets <- function(dataset,
response_name,
output_set_type){
set.seed(1)
training.samples <- createDataPartition(as_vector(dataset[response_name]),
p = 0.8,
list = F)
train.data <- suppressWarnings(dataset[training.samples, ])
test.data <- suppressWarnings(dataset[-training.samples, ])
l <- list()
l[["train.data"]] <-
train.data
l[["test.data"]] <-
test.data
out <- if(output_set_type == "train") {
as_tibble(l$train.data)
} else {
as_tibble(l$test.data)
}
return(out)
}
train_dat <- split_sets(student_performance, "G3", "train")