如何将循环中的图保存到 R 中的不同 pdf(对于 lmer 图)?
How to save plots in a loop to different pdfs in R (for lmer plots)?
在循环的每次迭代中,我想将我的绘图保存到 pdf 中。我找到了一些很好的代码示例(例如 here),但出于某种原因,它在我的情况下不起作用。我做错了什么?
我做了以下事情:
save_as = "xxxx.pdf"
# dataframe
Var1 <- c(1.0, 1.4, 2.0, 0.7, 0.8, 1.3, 1.6, 0.9, 0.5)
Var2 <- c(100, 99, 320, 219, 280, 299, 210, 200, 190)
Var3 <- c(10, 1, 4, 8, 19, 20, 7, 8, 2)
indep1 <- c(10, 11, 14, 25, 23, 21, 33, 11, 14)
indep2 <- c("species1", "species1", "species2", "species3", "species1", "species3", "species2", "species2", "species2")
df <- data.frame(Var1, Var2, Var3, indep1, indep2)
# dependent variables
dep_vars = c("Var1", "Var2", "Var3")
for (i in dep_vars){
## model specification
model1 = lmer(eval(parse(text=paste("df$", i, sep = ""))) ~ df$indep1 + (1|df$indep2))
model2 = lmer(eval(parse(text=paste("df$", i, sep = ""))) ~ (1|df$indep2))
# open pdf
new_save_as = gsub('xxxx', i, save_as)
pdf(new_save_as)
# put plots in
par(mfrow = c(1,2))
plot(model1, type=c("p", "smooth"), col.line=1)
plot(model2, type=c("p", "smooth"), col.line=1)
# close file
dev.off()
}
如果我 运行 这没有循环,文件将按我的需要创建。但是,如果我使用循环,pdf 会创建但保持为空。有人知道为什么吗?
此外,欢迎对我的代码提出任何其他意见,因为我是 R 的新手。
谢谢!
如果我们想使用循环,eval(parse
不是最好的方法。而是使用 [[
对列
进行子集化
for (i in dep_vars){
model1 = lmer(df[[i]] ~ df$indep1 + (1|df$indep2))
model2 = lmer(df[[i]]~ df$indep1 + (1|df$indep2))
# open pdf
new_save_as = gsub('xxxx', i, save_as)
pdf(new_save_as)
# put plots in
par(mfrow = c(1,2))
print(plot(model1, type=c("p", "smooth"), col.line=1))
print(plot(model2, type=c("p", "smooth"), col.line=1))
# close file
dev.off()
}
在循环的每次迭代中,我想将我的绘图保存到 pdf 中。我找到了一些很好的代码示例(例如 here),但出于某种原因,它在我的情况下不起作用。我做错了什么?
我做了以下事情:
save_as = "xxxx.pdf"
# dataframe
Var1 <- c(1.0, 1.4, 2.0, 0.7, 0.8, 1.3, 1.6, 0.9, 0.5)
Var2 <- c(100, 99, 320, 219, 280, 299, 210, 200, 190)
Var3 <- c(10, 1, 4, 8, 19, 20, 7, 8, 2)
indep1 <- c(10, 11, 14, 25, 23, 21, 33, 11, 14)
indep2 <- c("species1", "species1", "species2", "species3", "species1", "species3", "species2", "species2", "species2")
df <- data.frame(Var1, Var2, Var3, indep1, indep2)
# dependent variables
dep_vars = c("Var1", "Var2", "Var3")
for (i in dep_vars){
## model specification
model1 = lmer(eval(parse(text=paste("df$", i, sep = ""))) ~ df$indep1 + (1|df$indep2))
model2 = lmer(eval(parse(text=paste("df$", i, sep = ""))) ~ (1|df$indep2))
# open pdf
new_save_as = gsub('xxxx', i, save_as)
pdf(new_save_as)
# put plots in
par(mfrow = c(1,2))
plot(model1, type=c("p", "smooth"), col.line=1)
plot(model2, type=c("p", "smooth"), col.line=1)
# close file
dev.off()
}
如果我 运行 这没有循环,文件将按我的需要创建。但是,如果我使用循环,pdf 会创建但保持为空。有人知道为什么吗?
此外,欢迎对我的代码提出任何其他意见,因为我是 R 的新手。
谢谢!
如果我们想使用循环,eval(parse
不是最好的方法。而是使用 [[
对列
for (i in dep_vars){
model1 = lmer(df[[i]] ~ df$indep1 + (1|df$indep2))
model2 = lmer(df[[i]]~ df$indep1 + (1|df$indep2))
# open pdf
new_save_as = gsub('xxxx', i, save_as)
pdf(new_save_as)
# put plots in
par(mfrow = c(1,2))
print(plot(model1, type=c("p", "smooth"), col.line=1))
print(plot(model2, type=c("p", "smooth"), col.line=1))
# close file
dev.off()
}