Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Ggplot2_Multiple Columns - Fatal编程技术网

R函数(循环?)为数据集中的每一列生成一个新的图形

R函数(循环?)为数据集中的每一列生成一个新的图形,r,loops,ggplot2,multiple-columns,R,Loops,Ggplot2,Multiple Columns,我试图编写代码来使用我的数据集,并为数据集的每一列创建一个新的图形,而不是每次都要在代码中为y写出一个新值 我有一个数据集,其中每一行是一个人,每一列是血液中的测量值(即胰岛素、葡萄糖等)。我有几个额外的列,其中有描述性的类别,我正在为我的组(即瘦、肥胖)使用。我想为每个列的测量值制作一个图表(即,一个是胰岛素的图表,另一个是葡萄糖的图表,等等)。我有90个不同的变量要循环 我已经知道了如何为每一个变量创建一个箱线图,但是却不知道如何让代码“循环”?这样我就不必为每个变量重新编写代码了 以mtc

我试图编写代码来使用我的数据集,并为数据集的每一列创建一个新的图形,而不是每次都要在代码中为y写出一个新值

我有一个数据集,其中每一行是一个人,每一列是血液中的测量值(即胰岛素、葡萄糖等)。我有几个额外的列,其中有描述性的类别,我正在为我的组(即瘦、肥胖)使用。我想为每个列的测量值制作一个图表(即,一个是胰岛素的图表,另一个是葡萄糖的图表,等等)。我有90个不同的变量要循环

我已经知道了如何为每一个变量创建一个箱线图,但是却不知道如何让代码“循环”?这样我就不必为每个变量重新编写代码了

以mtcars数据集为例,我让它生成一个图,其中y是disp,然后是另一个图,其中y=hp,然后y=drat。
我如何设置它,使我的代码自动循环使用数据集中的所有变量(我有90个变量)?

这里有一个基本解决方案,您可以使用90个变量来填充
矢量变量来循环:

library(tidyverse)

plot_func <- function(yval){
  p <- ggplot(data = mtcars, aes(x = cyl, y = yval)) +
    geom_boxplot()+
    geom_point()
  p
}


vector_of_yvals <- c("disp", "hp", "drat")

list_of_plots <- map(vector_of_yvals, plot_func)
这将为您提供一个向量:

[1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"
如果不想在向量中包含
cyl
,可以按如下方式将其过滤掉:

vector_of_yvals <- vector_of_yvals %>% .[. != "cyl"]
vector\u of_yvals%..!=“cyl”]

这里有一个稍微不同的版本,使用for循环和使用
!!sym()
来计算变量文本字符串:

library(rlang)
variables<-c("disp", "hp", "drat")

for (var in variables) {
  # print(var)
   p<-ggplot(data = mtcars, aes(x = cyl, y = !!sym(var), group=cyl)) +
      geom_boxplot()+
      geom_point()
   print(p)
}
库(rlang)

变量我必须输入每个y值吗,或者有没有一种方法可以不用输入每个y值就可以完成这项工作?例如,向量你可以用这个:
vector\u of yvals你最后要对90个图做什么?问这个问题,因为你可能想看看
facet\u wrap
或者(甚至更好)
ggforce::facet\u wrap\u paginate
在您将数据从宽改为长后。好的-我会看一看。在这一点上,我只想对数据进行快速可视化。很高兴尝试其中任何一种,如果它可以做同样的事情,但将它们放在一个更好的格式中。您能指导我如何使用该函数吗?这很好!我很高兴我现在尝试使用ggforce::facet\u wrap\u paginate的建议,这样我的图表就不是每页1个了。我认为需要在print命令之前添加代码,但不知道第一个“facet”应该是“
facet\u wrap\u paginate”((facets,nrow=9,ncol=10,scales=“free”,shrink=TRUE,labeller=“label\u value“,as.table=TRUE,switch=NULL,drop=TRUE,dir=“h”,strip.position=“top”,page=1)
要使用
ggforce::facet\u wrap\u paginate
您必须将数据从宽格式重塑为长格式。
tidyr::pivot\u longer()
是执行该转换的函数。
vector_of_yvals <- vector_of_yvals %>% .[. != "cyl"]
library(rlang)
variables<-c("disp", "hp", "drat")

for (var in variables) {
  # print(var)
   p<-ggplot(data = mtcars, aes(x = cyl, y = !!sym(var), group=cyl)) +
      geom_boxplot()+
      geom_point()
   print(p)
}