我是 multidplyr 的新手。我有一个类似于这创建的数据集:

library(multidplyr)
library(tidyverse)
library(nycflights13)
f<-flights %>% group_by(month) %>% nest()

现在我想在不同节点上对这些小标题中的每一个进行操作。
cluster <- create_cluster(12)
f2<-partition(f,month,cluster=cluster)

一切似乎都还好,直到这里,但是当我这样做时:
models<-f2 %>%
  do(mod=lm(arr_delay~dey_delay,data=.))

我收到以下错误消息:
Error in checkForRemoteErrors(lapply(cl, recvResult)) :
  12 nodes produced errors; first error: object 'arr_delay' not found

现在如果我尝试
f2  %>% browser(.)

然后尝试 .$ 我无权访问任何列-

任何想法如何访问这些列?

最佳答案

这个问题有两个部分:
1. 为什么使用 do 会出错?
将函数应用于嵌套列(或“列表列”)的“正确”方法不是使用 do ,而是使用 map 。在这种情况下,multidplyr 并不重要,因为正常的 dplyr 代码给出了相同的错误。

f <- flights %>% group_by(month) %>% nest()

models <- f %>%
  do(mod = lm(arr_delay ~ dey_delay, data = .))

另一方面,使用 map 中的 purrr 效果很好。
models <- f %>%
  mutate(model = purrr::map(data, ~ lm(arr_delay ~ dep_delay, data = .)))
multidplyr 代码与 mutatemap 一起使用也可以正常工作。
2. 如何查看 party_df 中的数据?
你不能轻易做到这一点。请记住,它们在您当前的 R session 中不可用,但在节点上可用。您可以使用这个小实用函数访问名称:
names.party_df <- function(x) {
  fun <- function(x) names(eval(x))
  multidplyr::cluster_call(x$cluster, fun, as.name(x$name))[[1]]
}
但是要访问完整数据,您很可能需要再次对数据进行 collect。或者,在 RStudio 中可以使用 View ,但请注意,这在大型数据集上效果不佳。

关于r - listcolumns 和 multidplyr,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40205391/

10-12 16:07