首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表列和multidplyr

列表列和multidplyr
EN

Stack Overflow用户
提问于 2016-10-23 16:55:44
回答 1查看 585关注 0票数 3

我是新来的多数派。我有一个类似于此创建的数据集:

代码语言:javascript
复制
library(multidplyr)
library(tidyverse)
library(nycflights13)
f<-flights %>% group_by(month) %>% nest()

现在,我想在每个不同节点上对这些数据进行操作。

代码语言:javascript
复制
cluster <- create_cluster(12)
f2<-partition(f,month,cluster=cluster)

在这里之前一切看起来都很好,但当我这么做的时候:

代码语言:javascript
复制
models<-f2 %>% 
  do(mod=lm(arr_delay~dey_delay,data=.))

我得到以下错误消息:

代码语言:javascript
复制
Error in checkForRemoteErrors(lapply(cl, recvResult)) : 
  12 nodes produced errors; first error: object 'arr_delay' not found

现在如果我尝试

代码语言:javascript
复制
f2  %>% browser(.)

然后尝试.$,我不能访问任何列-

有什么想法可以访问这些列吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-23 19:45:09

这个问题有两部分:

1.为什么使用do时出错?

将函数应用于嵌套列(或“列表列”)的“适当”方法不是使用do,而是使用map。在这种情况下,multidplyr并不是很重要,因为普通的dplyr代码会产生同样的错误。

代码语言:javascript
复制
f <- flights %>% group_by(month) %>% nest()    

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

eval中的错误(expr,envir,enclos):找不到对象'arr_delay‘

另一方面,使用来自mappurrr可以很好地工作。

代码语言:javascript
复制
models <- f %>%
  mutate(model = purrr::map(data, ~ lm(arr_delay ~ dep_delay, data = .)))

将您的multidplyr代码与mutatemap一起使用也很好。

2.如何在party_df中查看数据

你不能轻易那么做。记住,它们在当前R会话中不可用,但在节点上可用。您可以使用这个小实用程序函数访问名称:

代码语言:javascript
复制
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,但请注意,这在大型数据集中不太有效。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40205391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档