gpt4 book ai didi

r - 在 dplyr 管道中的函数之后立即使用 $ 进行子集化时出错

转载 作者:行者123 更新时间:2023-12-04 09:29:44 24 4
gpt4 key购买 nike

对于返回 data.frame 的函数,我可以使用以下语法对单个列进行子集化或 list :

library(dplyr)
filter(mtcars, disp > 400)$mpg
# [1] 10.4 10.4 14.7

但这在管道中使用时会导致以下错误( %>% ):
mtcars %>% filter(disp > 400)$mpg
# Error in .$filter(disp > 400) :
# 3 arguments passed to '$' which requires 2

我想知道为什么 $像上面的例子一样在管道中使用时不起作用。

最佳答案

我想我已经找到原因了。

当我打电话时filter(mtcars, disp > 400)$mpg ,实际发生的是:

`$`(filter(mtcars, disp > 400), mpg)
# [1] 10.4 10.4 14.7

同样, mtcars %>% filter(disp > 400)$mpg被解释为:
`$`(mtcars, filter(disp > 400), mpg)

, 因为 %>% 的 lhs将是函数在 rhs 的第一个参数。这重现了与 $ 相同的错误需要 2 个参数,而提供了 3 个参数。
# Error in mtcars$filter(disp > 400) : 
# 3 arguments passed to '$' which requires 2

错误信息也验证了上述猜测。 mtcars用作 data.frame 名称和 filter(disp > 400)被视为列名: mtcars$filter(disp > 400) .

关于r - 在 dplyr 管道中的函数之后立即使用 $ 进行子集化时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45529736/

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