mutate(Row_sum = apply(X =-6ren">
gpt4 book ai didi

r - "invalid use of pipe placeholder"与 dplyr::mutate 内的基本 R 管道

转载 作者:行者123 更新时间:2023-12-05 01:04:11 26 4
gpt4 key购买 nike

为什么 dplyr::mutate 中带有基本 R 管道和占位符的这个命令会返回错误消息?

library(dplyr)
iris[,-5] |> mutate(Row_sum = apply(X = _, 1, function(x) sum(x)))

#> Error in mutate(iris[, -5], Row_sum = apply(X = "_", 1, function(x) sum(x))) :
#> invalid use of pipe placeholder

在 mutate 之外工作正常:

iris[,-5] |> apply(X = _, 1, function(x) sum(x))

#> [1] 10.2 9.5 9.4 9.4 10.2 11.4 9.7 10.1 8.9 9.6 10.8 10.0 9.3 8.5 11.2
#> [16] 12.0 11.0 10.3 11.5 10.7 10.7 10.7 9.4 10.6 10.3 9.8 10.4 10.4 10.2 9.7
#> [31] (...)

使用 magrittr 管道在 mutate 中工作正常

iris[,-5] %>% mutate(Row_sum = apply(X = ., 1, function(x) sum(x))) %>% head

#> Sepal.Length Sepal.Width Petal.Length Petal.Width Row_sum
#> 1 5.1 3.5 1.4 0.2 10.2
#> 2 4.9 3.0 1.4 0.2 9.5
#> 3 4.7 3.2 1.3 0.2 9.4
#> 4 4.6 3.1 1.5 0.2 9.4
#> 5 5.0 3.6 1.4 0.2 10.2
#> 6 5.4 3.9 1.7 0.4 11.4

最佳答案

问题是在使用嵌套函数调用时,您不能将 _|> 一起使用。例如第一个有效,第二个无效

5 |> log()
# [1] 1.609438
5 |> log(exp(_))
# Error in log(5, exp("_")) : invalid use of pipe placeholder

请注意 |>_%>%. 在这种情况下有点不同.如果您使用 .%>% 作为表达式的一部分,完整的管道对象仍然作为第一个参数传递给函数。所以你基本上把它包括了两次。 |>_ 永远不会发生这种情况。例如

iris %>% split(.$Species)

之所以有效,是因为它与

split(iris, iris$Species)

请注意,虹膜基本上被包含两次。但这不适用于新的管道运算符

iris |> split(_$Species)
# Error in split(iris, "_"$Species) : invalid use of pipe placeholder

因为它基本上是一个嵌套函数调用($ 算作函数​​调用)。这也是他们同时更新 split 以现在也使用公式的原因之一。所以这会工作

iris |> split(~Species)

如果你只是想添加一个没有第五列的行总和,你可以这样做

iris |>
mutate(Row_sums=rowSums(across(-5)))
# or
iris[, -5]|>
mutate(Row_sums=rowSums(across(everything())))

关于r - "invalid use of pipe placeholder"与 dplyr::mutate 内的基本 R 管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72631405/

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