我是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'")
}
提前感谢您的帮助。
答案 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"
,可以转换为公式。