【发布时间】:2016-07-25 21:45:54
【问题描述】:
是否可以在 dplyr.
这是有效的:
birdsss = data.frame(x1 = 1:10,x2 = 21:30,x3 = 41:50)
birdsss%>%
with(hist(x1, breaks = 50))
但这不起作用:
birdsss%>%
with(hist(x1, breaks = 50)) %>%
with(hist(x2, breaks = 50)) %>%
with(hist(x3, breaks = 50))
Error in hist(x2, breaks = 50) : object 'x2' not found
我也试过了:
birdsss%>%
with(hist(x1, breaks = 50)) &
with(hist(x2, breaks = 50)) &
with(hist(x3, breaks = 50))
和
birdsss%>%
with(hist(x1, breaks = 50)) ;
with(hist(x2, breaks = 50)) ;
with(hist(x3, breaks = 50))
在一行中打印多列的解决方案是什么?
类似:
birdsss%>%
with(hist(x1:x3, breaks = 50))
我正在使用更长的管道(filter()、select() 等)以及如何使用多个图形来完成。我在这里简化了代码。
【问题讨论】:
-
我喜欢 dplyr,但
lapply(birdsss, hist, breaks = 50)更容易。如果你真的想要一个 tidyverse 版本,请使用purrr的map或walk。 -
问题是我受到我正在使用的代码的限制,因为我也在使用 filter()、select() 等。这就是为什么我认为在管道内使用 apply...但它也不起作用。
-
这真的不是一个或另一个; base 和 tidyverse 完美地结合在一起。如果您愿意,可以链接到
lapply,例如birdsss %>% lapply(hist, breaks = 50)。如果你要完整的 tidyverse,请使用 ggplot2 并且只是方面:birdsss %>% tidyr::gather() %>% ggplot(aes(value)) + geom_histogram(bins = 51) + facet_wrap(~key) -
酷!我没有以正确的方式“应用”!是否可以更改 lapply 函数内的图形标题。我试过 main = c("something1","something2","something3"),但它不起作用
-
由于您现在尝试并行传递两个参数,因此您可以将
mapply/Map用于多变量版本(或各种purrr版本,例如map2/@987654337 @,哪个更容易链接)。在这里,可能是Map(function(x, y){hist(x, breaks = 50, main = y)}, birdsss, names(birdsss)),或者purrr版本:walk2(birdsss, names(birdsss), ~hist(.x, breaks = 50, main = .y))