我是新来的多数派。我有一个类似于此创建的数据集:
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(.)然后尝试.$,我不能访问任何列-
有什么想法可以访问这些列吗?
发布于 2016-10-23 19:45:09
这个问题有两部分:
1.为什么使用do时出错?
将函数应用于嵌套列(或“列表列”)的“适当”方法不是使用do,而是使用map。在这种情况下,multidplyr并不是很重要,因为普通的dplyr代码会产生同样的错误。
f <- flights %>% group_by(month) %>% nest()
models <- f %>%
do(mod = lm(arr_delay ~ dey_delay, data = .))eval中的错误(expr,envir,enclos):找不到对象'arr_delay‘
另一方面,使用来自map的purrr可以很好地工作。
models <- f %>%
mutate(model = purrr::map(data, ~ lm(arr_delay ~ dep_delay, data = .)))将您的multidplyr代码与mutate和map一起使用也很好。
2.如何在party_df中查看数据
你不能轻易那么做。记住,它们在当前R会话中不可用,但在节点上可用。您可以使用这个小实用程序函数访问名称:
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,但请注意,这在大型数据集中不太有效。
https://stackoverflow.com/questions/40205391
复制相似问题