我是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(.)
然后尝试。$我无法访问任何列 -
有关如何访问这些列的任何想法吗?
答案 0 :(得分:4)
这个问题分为两部分:
do
收到错误?&#34;适当&#34;将函数应用于嵌套列(或&#34;列列&#34;)的方法不是使用do
,而是使用map
。在这种情况下,multidplyr
并不重要,因为正常的dplyr
代码会产生相同的错误。
f <- flights %>% group_by(month) %>% nest()
models <- f %>%
do(mod = lm(arr_delay ~ dey_delay, data = .))
eval(expr,envir,enclos)中的错误:object&#39; arr_delay&#39;找不到
另一方面,使用map
中的purrr
可以正常工作。
models <- f %>%
mutate(model = purrr::map(data, ~ lm(arr_delay ~ dep_delay, data = .)))
将multidplyr
代码与mutate
和map
一起使用也可以。
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
,但请注意,这对大型数据集不起作用。