gpt4 book ai didi

r - 参数未在带过滤器的函数中实现,但没有错误消息

转载 作者:行者123 更新时间:2023-12-04 10:09:17 32 4
gpt4 key购买 nike

这是我之前遇到的一个问题,总是选择一种解决方法,但没有更多!
我想为 filter 在我的函数中引入一个参数,但它不能正常工作。我怀疑它与引号有关,但我不明白。让我用一个例子来解释这个问题:

library(dplyr)
data(mtcars)

mtcars %>% filter(am > 0)

按预期过滤。
让我们做一个相应的功能。
fun_a <- function(b) {
mtcars %>%
filter(b > 0)
}

并测试它。

fun_a(am)

抛出错误:

Error: object 'am' not found

另一个尝试。

fun_a("am")

没有错误,但也不过滤。
这里发生了什么?

我找到了一个例子,它很好地说明了这里发生的事情:

mtcars %>% mutate(ex = am)

这会为您提供一个名为 ex 的列,它是 mtcars$am 的副本。 :

    mpg cyl  disp  hp drat    wt  qsec vs am gear carb ex
1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 1
2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 1
3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 1
4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 0
5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 0
6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 0

fun_f <- function(f){
mtcars %>% mutate(ex = f)
}

fun_f("am")

从这里你得到一个新的列 ex 填充 am,字面意思是:

   mpg cyl disp  hp drat    wt  qsec vs am gear carb ex
1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 am
2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 am
3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 am
4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 am
5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 am
6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 am

最佳答案

问题是b不被视为函数上下文中数据帧的一部分。

您可以使用 get :

fun_a <- function(b) {  
mtcars %>%
filter(get(b) > 0)
}
fun_a("am")

关于r - 参数未在带过滤器的函数中实现,但没有错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57377148/

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