通过循环在R中创建大量的图

时间:2017-11-27 03:21:03

标签: r loops

我是Stata高级用户,R新手无法让循环在R中正常工作。基本上我在数据框中有一堆列,我想创建一系列pirateplots

我试过

mycols <- c("column1","column2","column3")
for (i in mycols){
  filename <- paste("~/Desktop/",i,".pdf",sep="")
  pdf(filename)
  pirateplot(formula = i ~ xvar,
             data = df)
  dev.off()
}

并且还尝试将c("column1","column2","column3")替换为实际的列名,即c(column1,column2,column3),但这也不起作用。是否有一种简单的方法来引用列表中的项目?看起来R似乎将字符串和变量名称视为不同的东西,但我似乎无法找到如何处理这个极其简单的案例的文档。

在Stata中,这会更简单,就像

foreach v of varlist column1-column3 {
   loc filename = "`v'plot"
   scatter `v' xvar, name("`filename'")
}

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

如果整个公式作为单个字符串输入,则可以使用代码,可以使用paste创建。这是一个内置mtcars数据框的可重现示例:

library(yarrr)

mycols <- c("wt","vs","hp")

for (i in mycols){

  filename <- paste(i, ".pdf", sep="")

  pdf(filename)
  pirateplot(formula = paste(i, "~ mpg"), data = mtcars)
  dev.off()
}

每次循环时,您的代码都会产生如下公式:

pirateplot("column1" ~ xvar, data=df)

这相当于我的例子中的以下内容:

pirateplot("wt" ~ mpg, data=mtcars)

这些会产生此错误:

Error in terms.formula(formula, data = data) : 
  invalid term in model formula

公式必须是类公式,如wt ~ mpg使用裸列名称,或字符串,如"wt ~ mpg",可以转换为公式。