运行循环以在R中绘制子数据集

运行循环以在R中绘制子数据集,r,for-loop,plot,R,For Loop,Plot,这是我想做的。我有一个类似于R中的Loblolly的数据集,它是14个种子的因子。我想运行一个循环,从每个种子(由30X给出的标识,其中X是一个整数)散点图数据显示y轴上的高度和X轴上的年龄。每个地块的标题都是种子标识“30X” 天哪,我不知道该怎么做。到目前为止,我只知道如何绘制一个散点图,如下所示: xrange<-range(Loblolly$age) yrange<-range(Loblolly$height) plot(xrange, yrange, type="n", x

这是我想做的。我有一个类似于R中的Loblolly的数据集,它是14个种子的因子。我想运行一个循环,从每个种子(由30X给出的标识,其中X是一个整数)散点图数据显示y轴上的高度和X轴上的年龄。每个地块的标题都是种子标识“30X”

天哪,我不知道该怎么做。到目前为止,我只知道如何绘制一个散点图,如下所示:

xrange<-range(Loblolly$age)
yrange<-range(Loblolly$height)
plot(xrange, yrange, type="n", xlab="Age", ylab="Height")

xrange好吧,这里有一个存根可以让你到达那里。我在列表中建立不同的目标,然后遍历它们:

# multiple plots via a for, with the x = sprintf in the aes call providing contextualized strings as params

varList = list("Var1","Var2","Var3")
plot_list = list()
for (i in 1:3) {
    gg = ggplot(data_set,aes(xfill=factor(RETAINED)))
    gg = gg + aes_string(x = sprintf("log(%s)", varList[[i]])) 
    gg = gg + geom_density(alpha=.3) + labs(x = varList[[i]],y="Density") 
    gg = gg + ggtitle(paste("Distribution of ",varList[[i]],sep=" ")) 
    plot_list[[i]] = gg
}

您当然可以为此创建for循环,但也可以使用一种方法,该方法基于
种子(按该列分组)分割数据集,并为每个子数据集生成绘图

首先将您的工作目录设置为要存储绘图的文件夹。 然后运行以下命令:

library(dplyr)

Loblolly %>%
  group_by(Seed) %>%
  do({pdf(paste0(.$Seed,".pdf"))
      plot(.$age, .$height, xlab="Age", ylab="Height", main=unique(.$Seed))
      dev.off()}) 
您应该忽略以下错误:
错误:结果不是位置1、2、3、4、5、6、7、8、9、10、11、12、13、14处的数据帧,请检查是否创建了PDF

如果您不想使用任何可以使用的库,请执行以下操作:

list_seeds = unique(Loblolly$Seed)   # get a list of seeds

for (i in list_seeds) {              # for every seed value

  dt = Loblolly[Loblolly$Seed == i,]    # get a sub-dataset that corresponds to that seed value

  pdf(paste0(i,".pdf"))
  plot(dt$age, dt$height, xlab="Age", ylab="Height", main=i)
  dev.off()
}

没有图书馆你怎么办?我的意思是,我知道这些快捷方式很好,但从实际循环的角度理解逻辑会很有帮助。