gpt4 book ai didi

r - dplyr `mutate` 使用两次时返回错误

转载 作者:行者123 更新时间:2023-12-04 10:16:47 24 4
gpt4 key购买 nike

看起来,对于存储在列表列中的某些类型的对象,dplyr::mutate 只会对它们起作用一次。也就是说,连续两次使用 mutate 会导致错误。

library(dplyr)
one_mod <- data.frame(grp = "a", x = runif(5,0,1)) %>%
tbl_df %>%
mutate(y = rnorm(x,x*2,1)) %>%
group_by(grp) %>%
do(mod = lm(y~x,data = .))

这种方法行不通:

one_mod %>%
mutate(rsq = summary(mod)$r.squared) %>%
mutate(aic = AIC(mod))
# Error: unsupported type for column 'mod' (VECSXP)

但是这个确实是

one_mod %>%
mutate(rsq = summary(mod)$r.squared,
aic = AIC(mod))
#Source: local data frame [1 x 4]
#Groups: grp
#
# grp mod rsq aic
#1 a <S3:lm> 0.6615589 10.63317

最佳答案

这已在 this commit 中修复.

正如 Hadley 暗示的那样,在两个 mutate 版本中,第一个没有创建一个 rowwise_df 对象,这是我们保证每个组只涉及一行数据,这样我们就可以引用 mod 而不是 mod[[1]]。除非我们知道数据可以被视为 rowwise_df,否则我们不会使用 mutate 处理列表列。

现在一切都很好,将您的示例用作新的 regression test

one_mod <- data.frame(grp = "a", x = runif(5,0,1)) %>%
tbl_df %>%
mutate(y = rnorm(x,x*2,1)) %>%
group_by(grp) %>%
do(mod = lm(y~x,data = .))
one_mod %>%
mutate(rsq = summary(mod)$r.squared) %>%
mutate(aic = AIC(mod))
# Source: local data frame [1 x 4]
# Groups: <by row>
#
# grp mod rsq aic
# 1 a <S3:lm> 0.04744827 11.91253

关于r - dplyr `mutate` 使用两次时返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24271398/

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