gpt4 book ai didi

r - listcolumns 和 multidplyr

转载 作者:行者123 更新时间:2023-12-01 12:25:35 28 4
gpt4 key购买 nike

我是 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 = .))

Error in eval(expr, envir, enclos) : object 'arr_delay' not found

另一方面,使用 purrr 中的 map 效果很好。

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]]
}

但要访问完整数据,您很可能需要再次收集您的数据。或者,在 RStudio 中,可以使用 View,但请注意,这在大型数据集上效果不佳。

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com