Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为多个方框图在r中创建循环_R_Loops_Iplots - Fatal编程技术网

为多个方框图在r中创建循环

为多个方框图在r中创建循环,r,loops,iplots,R,Loops,Iplots,我设计了一个实验来观察自从吃饭后血清标志物是如何随时间变化的。我有一个由72个观测值和23个变量组成的数据框,这叫做BreakfastM 有229个变量是血清标记物,1个变量是时间点。观察结果是不同的样本 我在寻找血清标志物(如胆固醇)随时间点变化的数据趋势。我创建了一个箱线图,很好地显示了特定血清标记物与时间点的关系 这是我使用的代码 boxplot((BreakfastM$Variable~BreakfastM$Timepoint)) 有没有一种快速的方法可以通过在R中编写循环代码来测试数

我设计了一个实验来观察自从吃饭后血清标志物是如何随时间变化的。我有一个由72个观测值和23个变量组成的数据框,这叫做BreakfastM

有229个变量是血清标记物,1个变量是时间点。观察结果是不同的样本

我在寻找血清标志物(如胆固醇)随时间点变化的数据趋势。我创建了一个箱线图,很好地显示了特定血清标记物与时间点的关系

这是我使用的代码

boxplot((BreakfastM$Variable~BreakfastM$Timepoint))

有没有一种快速的方法可以通过在R中编写循环代码来测试数据帧中的所有变量与时间点之间的关系?

如果您只是想绘图,使用tidyr和dplyr转换为长格式,然后使用ggplot2绘图可能是最好的起点

如果只有少量变量,可以使用facet_wrap按度量分割箱线图。因为您没有提供可复制的数据,所以我使用mtcars数据,将档位替换为您的时间点,并且仅限于要比较的数值。select选择我要使用的列,然后在传递到ggplot之前将它们转换为长格式

现在,有229个变量,这将不是一个可读的绘图。相反,您可能希望从ggplus查看facet_multiple,它将facet分布在多个页面上。在这里,我使用它来放置每页一个,您可以在查看器中查看,也可以根据需要保存

首先,保存无镶嵌面的基本绘图:

basePlot <-
  mtcars %>%
  select(gear, mpg, disp:qsec) %>%
  gather(Measure, Value, -gear) %>%
  ggplot(aes(x = factor(gear)
             , y = Value)) +
  geom_boxplot()

将生成与上述相同的面板,但如果每页更改一个nrow和ncol,则会增加每页显示的面数。

您还可以使用循环将许多绘图写入工作目录中的图像文件。让我们制作一个10列矩阵,表示10个测量变量,每个变量由3个因子级别分割:

data <- matrix(rnorm(150), nrow=15)
grps <- factor(c(rep("group1", 5), rep("group2", 5), rep("group3", 5)))
这些文件非常小,您可以使用简单的图像查看器快速浏览它们


现在有点不清楚你在要求什么-你是在寻找一个可以创建229个箱线图的循环吗?谢谢你的回复。有九个时间点,如果我对变量胆固醇运行上面的命令,我会生成一个带有9个方框图的图,每个时间点一个。我想通过替换变量生成229个图,以快速查看数据。希望这是有意义的。有没有一种快速的方法通过在R中编写循环代码来测试数据帧中的所有变量和时间点?从哪里可以将我的代码翻译成dplyr和ggplot?@rawr:从quick way-这是或可能是更少的代码,使其能够灵活地处理任意数量的变量。它生成所需的输出,但肯定只是一种方法。如果你认为没有它有更快的方法,我很乐意看到。我不认为dplyr或ggplot是适用于一切事物的正确工具,它们在这里可能是错误的。然而,这是我最近玩过的一个玩具,我认为它可能有用。好的,但是测试所有变量。。。与时间点相反的问题是,与绘图无关显示的代码的唯一示例是一个箱线图,至少还有一位评论者询问OP想要的是一组箱线图。请注意,我的答案的顶部说,如果你只是想绘图。。。由于措辞不够清晰,我有点冒昧地解释了OP的意图。如果ze真的想要测试,ze需要澄清,例如ANOVA vs lm,我的答案不会解决这个问题。如果ze只想要快速的视觉效果,这可能是一个更好的主意,考虑到这里涉及的多重测试,那么这是一个可行的选择。如果我错了,我错了,我会很高兴地删除。
facet_multiple(basePlot, "Measure"
               , nrow = 1
               , ncol = 1
               , scales = "free_y")
data <- matrix(rnorm(150), nrow=15)
grps <- factor(c(rep("group1", 5), rep("group2", 5), rep("group3", 5)))
for (i in 1:ncol(data)) {
  png(file = paste("var_", i, ".png", sep=""))
  boxplot(data[, i] ~ grps)
  dev.off()
}