我刚刚遇到了一些奇怪的行为,其中dplyr不断summarize引用前一组中的对象。
这是一个简单的可重复示例来说明令人惊讶的行为:
\nlibrary(dplyr, warn.conflicts = FALSE)\ntibble(x = rep(letters[1:3], times = 4),\n y = rnorm(12)) %>%\n group_by(x) %>%\n summarize(z1 = sum(y),\n z2 = {\n attr(y, "test") <- "test"\n sum(y)\n })\n#> # A tibble: 3 \xc3\x97 3\n#> x z1 z2\n#> <chr> <dbl> <dbl>\n#> 1 a 0.602 0.602\n#> 2 b 1.22 0.602\n#> 3 c -0.310 0.602\nRun Code Online (Sandbox Code Playgroud)\n由reprex 包于 2022 年 10 月 31 日创建(v2.0.1)
\n我期望的是z1和z2是相同的。我不明白为什么为向量设置属性y意味着在以后的迭代中,对“正确”元素的引用y被隐藏。