gpt4 book ai didi

r - 使用错误的含义。 dplyr 函数内的简写

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

我收到 dplyr::bind_rows 错误。这是一个非常微不足道的问题,因为我可以轻松解决它,但我想了解错误消息的含义。

我有新英格兰州一些人口群体的以下数据,我想绑定(bind)这些相同值的副本,并将名称更改为“新英格兰”,以便我可以按名称分组并添加将它们列出来,为我提供各个州的值以及该地区的总体值。

df <- structure(list(name = c("CT", "MA", "ME", "NH", "RI", "VT"), 
estimate = c(501074, 1057316, 47369, 76630, 141206, 27464)),
class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -6L))

我这样做是作为更大的管道步骤流的一部分,所以我不能只执行 bind_rows(df, df %>% mutate(name = "New England"))。 dplyr 为从一个函数通过管道传输到下一个函数的数据帧提供了方便的 . 简写,但我无法使用它以某种方式将数据帧绑定(bind)到自身我愿意。

什么起作用并让我得到我想要的输出:

library(tidyverse)

df %>%
# arbitrary piped operation
mutate(name = str_to_lower(name)) %>%
bind_rows(mutate(., name = "New England")) %>%
group_by(name) %>%
summarise(estimate = sum(estimate))
#> # A tibble: 7 x 2
#> name estimate
#> <chr> <dbl>
#> 1 ct 501074
#> 2 ma 1057316
#> 3 me 47369
#> 4 New England 1851059
#> 5 nh 76630
#> 6 ri 141206
#> 7 vt 27464

但是当我尝试使用 . 简写做同样的事情时,我收到此错误:

df %>%
mutate(name = str_to_lower(name)) %>%
bind_rows(. %>% mutate(name = "New England"))
#> Error in bind_rows_(x, .id): Argument 2 must be a data frame or a named atomic vector, not a fseq/function

就像我说的,第一种方法很好,但我想了解错误,因为我编写了很多多步骤管道代码。

最佳答案

正如 @aosmith 在评论中指出的那样,这是由于 magrittr 在这种情况下解析点的方式造成的:

来自?'%>%':

Using the dot-place holder as lhs

When the dot is used as lhs, the result will be a functional sequence, i.e. a function which applies the entire chain of right-hand sides in turn to its input.

为了避免触发此问题,对 lhs 上的表达式进行任何修改都可以:

df %>%
mutate(name = str_to_lower(name)) %>%
bind_rows((.) %>% mutate(name = "New England"))

df %>%
mutate(name = str_to_lower(name)) %>%
bind_rows({.} %>% mutate(name = "New England"))

df %>%
mutate(name = str_to_lower(name)) %>%
bind_rows(identity(.) %>% mutate(name = "New England"))

这里有一个完全避免该问题的建议:

df %>%
# arbitrary piped operation
mutate(name = str_to_lower(name)) %>%
replicate(2,.,simplify = FALSE) %>%
map_at(2,mutate_at,"name",~"New England") %>%
bind_rows

# # A tibble: 12 x 2
# name estimate
# <chr> <dbl>
# 1 ct 501074
# 2 ma 1057316
# 3 me 47369
# 4 nh 76630
# 5 ri 141206
# 6 vt 27464
# 7 New England 501074
# 8 New England 1057316
# 9 New England 47369
# 10 New England 76630
# 11 New England 141206
# 12 New England 27464

关于r - 使用错误的含义。 dplyr 函数内的简写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50729045/

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