通过更改变量名称和数据集执行线性模型循环
loop for linear model execution with changing vars names and data sets
我正在处理一个我想自动化的任务,我是循环和变量赋值的新手,所以任何帮助都会很棒。
该任务有两个步骤:首先获取几个具有一个不同字符的数据集,然后应用一个 lm 模型,其变量也具有一个与数据集一致的不同字符 name.For 示例:使用数据集使用名称 SF_FinalviewQ3_2013_Day**3**_BaseLine
并应用包含 IsDepositorDay**3**
和 IsDueDay**3**
等变量的 lm。我有大约 10 个数据集和 50 个变量,我想将它们自动化,所以我尝试根据来自该站点的 answare 使用此代码,但出现错误。
Error: unexpected symbol in:
" eval(parse(text = paste0("SF_FinalviewQ3_2013_Day", i, "_BaseLine<-maindata"))
f"
# Here is my code
f <- NA # first I reset f
index <- 1 # this will be the index
for(i in c(3,10){ #3,10 are the only charcter that changes in the data sets and in vars names.
var[i]<-paste("IsDepositorDay",i,sep="")
eval(parse(text = "var[i]"))
maindata<-paste("SF_FinalviewQ3_2013_Day",i,"_BaseLine",sep="")
eval(parse(text = paste0("SF_FinalviewQ3_2013_Day", i, "_BaseLine<-maindata"))
f[index]<-lm(IsDepositorDay180~ var1,data=maindata)
index <- index + 1
}
我该如何解决?
#per a request to make my example reproducible i did the following changes:
dat1 <- read.table(text = " target birds_1 wolfs_1 snakes_1
0 3 9 7
1 3 8 4
1 1 2 8 ",header = TRUE)
dat2 <- read.table(text = " target birds_2 wolfs_2 snakes_2
1 3 2 4
0 8 8 3
5 1 2 8 ",header = TRUE)
f <- NA # first I reset f
index <- 1 # this will be the index
for(i in c(1,2)){ #1,2 are the only charcter that changes in the data sets and in vars names.
birds_[i]<-paste("birds_",i,sep="")
wolfs_[i]<-paste("wolfs_",i,sep="")
snakes_[i]<-paste("snakes_",i,sep="")
eval(parse(text = "birds_[i]"))
eval(parse(text = "wolfs_[i]"))
eval(parse(text = "snakes_[i]"))
maindata<-paste("dat",i,sep="")
eval(parse(text = paste0("dat", i, "<-maindata"))
f[index]<-lm(target~ birds_[i]+snakes_[i],data=maindata)
index <- index + 1
}
如果我理解正确,lm 对象可以保存在如下列表中。为了简单起见,删除了不包含在公式中的列。
# way 1 with loop
f <- list()
dat <- list(dat1, dat2)
for(i in 1:2) f[[i]] <- lm(target ~ ., data = dat[[i]][,-3])
# way 2 with lapply
dat <- list(dat1[,-3], dat2[,-3])
lapply(dat, lm, formula = target ~ .)
[[1]]
Call:
FUN(formula = ..1, data = X[[1L]])
Coefficients:
(Intercept) birds_1 snakes_1
4.3333 -0.6667 -0.3333
[[2]]
Call:
FUN(formula = ..1, data = X[[2L]])
Coefficients:
(Intercept) birds_2 snakes_2
-3 0 1
您的一些设置建议是
- 保持因变量(您的示例中的目标)的列名相同
- 保持相同数量的自变量(最好保持相同的顺序)
那么公式就很容易建立,关键变量(系数...)也很容易提取。
我正在处理一个我想自动化的任务,我是循环和变量赋值的新手,所以任何帮助都会很棒。
该任务有两个步骤:首先获取几个具有一个不同字符的数据集,然后应用一个 lm 模型,其变量也具有一个与数据集一致的不同字符 name.For 示例:使用数据集使用名称 SF_FinalviewQ3_2013_Day**3**_BaseLine
并应用包含 IsDepositorDay**3**
和 IsDueDay**3**
等变量的 lm。我有大约 10 个数据集和 50 个变量,我想将它们自动化,所以我尝试根据来自该站点的 answare 使用此代码,但出现错误。
Error: unexpected symbol in:
" eval(parse(text = paste0("SF_FinalviewQ3_2013_Day", i, "_BaseLine<-maindata"))
f"
# Here is my code
f <- NA # first I reset f
index <- 1 # this will be the index
for(i in c(3,10){ #3,10 are the only charcter that changes in the data sets and in vars names.
var[i]<-paste("IsDepositorDay",i,sep="")
eval(parse(text = "var[i]"))
maindata<-paste("SF_FinalviewQ3_2013_Day",i,"_BaseLine",sep="")
eval(parse(text = paste0("SF_FinalviewQ3_2013_Day", i, "_BaseLine<-maindata"))
f[index]<-lm(IsDepositorDay180~ var1,data=maindata)
index <- index + 1
}
我该如何解决?
#per a request to make my example reproducible i did the following changes:
dat1 <- read.table(text = " target birds_1 wolfs_1 snakes_1
0 3 9 7
1 3 8 4
1 1 2 8 ",header = TRUE)
dat2 <- read.table(text = " target birds_2 wolfs_2 snakes_2
1 3 2 4
0 8 8 3
5 1 2 8 ",header = TRUE)
f <- NA # first I reset f
index <- 1 # this will be the index
for(i in c(1,2)){ #1,2 are the only charcter that changes in the data sets and in vars names.
birds_[i]<-paste("birds_",i,sep="")
wolfs_[i]<-paste("wolfs_",i,sep="")
snakes_[i]<-paste("snakes_",i,sep="")
eval(parse(text = "birds_[i]"))
eval(parse(text = "wolfs_[i]"))
eval(parse(text = "snakes_[i]"))
maindata<-paste("dat",i,sep="")
eval(parse(text = paste0("dat", i, "<-maindata"))
f[index]<-lm(target~ birds_[i]+snakes_[i],data=maindata)
index <- index + 1
}
如果我理解正确,lm 对象可以保存在如下列表中。为了简单起见,删除了不包含在公式中的列。
# way 1 with loop
f <- list()
dat <- list(dat1, dat2)
for(i in 1:2) f[[i]] <- lm(target ~ ., data = dat[[i]][,-3])
# way 2 with lapply
dat <- list(dat1[,-3], dat2[,-3])
lapply(dat, lm, formula = target ~ .)
[[1]]
Call:
FUN(formula = ..1, data = X[[1L]])
Coefficients:
(Intercept) birds_1 snakes_1
4.3333 -0.6667 -0.3333
[[2]]
Call:
FUN(formula = ..1, data = X[[2L]])
Coefficients:
(Intercept) birds_2 snakes_2
-3 0 1
您的一些设置建议是
- 保持因变量(您的示例中的目标)的列名相同
- 保持相同数量的自变量(最好保持相同的顺序)
那么公式就很容易建立,关键变量(系数...)也很容易提取。