在我的数据集中,我有6个变量(x1,x2,x3,x4,x5,x6),我希望创建一个允许我输入一个变量的函数,它将使用其余变量执行公式数据集。
例如,
fitRegression <- function(data, dependentVariable) {
fit = lm(formula = x1 ~., data = data1)
return(fit)
}
fitRegression(x2)
但是,此函数仅返回x1的结果。我希望的结果是输入任何变量,并自动用其余变量做公式。
例如:
fitRegression(x2)
应从变量列表中减去x2,因此我们只将x2与x1,x3,x4,x5,x6进行比较。
以及如果:
fitRegression(x3)
应从可比较列表中减去x3,因此我们将x3与x1,x2,x4,x5,x6进行比较。
有没有办法将其表达为我的功能,甚至更好的功能。
答案 0 :(得分:1)
您想在参数中选择Y变量。主要的困难是在你的函数中没有任何引号传递这个参数(它显然是代码中的预期结果)。因此,您可以使用此方法,使用组合deparse(substitute(...))
:
fitRegression <- function(data, dependentVariable) {
formula <- as.formula(paste0(deparse(substitute(dependentVariable)), "~."))
return(lm(formula, data) )
}
fitRegression(mtcars, disp)
这将返回模型。
答案 1 :(得分:1)
以下功能使用&#34; purrr&#34;和&#34;插入&#34;它会生成一个模型列表。
df <-mtcars
library(purrr);library(caret)
#create training set
vect <- createDataPartition(1:nrow(df), p=0.8, list = FALSE)
#build model list
ModList <- 1:length(df) %>%
map(function(col) train(y= df[vect,col], x= df[vect,-col], method="lm"))
答案 2 :(得分:1)
你可以这样做:
# sample data
sampleData <- data.frame(matrix(rnorm(500),100,5))
colnames(sampleData) <- c("A","B","C","D","E")
# function
fitRegression <- function(mydata, dependentVariable) {
# select your independent and dependent variables
dependentVariableIndex<-which(colnames(mydata)==dependentVariable)
independentVariableIndices<-which(colnames(mydata)!=dependentVariable)
fit = lm(formula = as.formula(paste(colnames(mydata)[dependentVariableIndex], "~", paste(colnames(mydata)[independentVariableIndices], collapse = "+"), sep = "" )), data = mydata)
return(fit)
}
# ground truth
lm(formula = A~B+C+D+E, data = sampleData)
# reconcile results
fitRegression(sampleData, "A")