R函数返回0,同一函数内部的代码在函数外部运行时返回正确的值



好吧,我是stackoverflow和r的新手。这可能是一个相当愚蠢的问题,但我找不到解决方案。

library(tidyverse)

下面是代码

sample_size_finder <-  function(variable, value){
df %>% 
select(variable) %>%
filter(variable == value) %>%
count()
}
  • df =先前导入的数据帧
  • variable =我想要从中选择和筛选的列的名称
  • value =我想为过滤的那一列中的值

我希望函数查找由参数"变量">指定的数据帧中的列,选择它,并从中过滤所有等于参数的观测值。. 然后,count()所有这些观察值。

当我试图运行函数

sample_size_finder("team_size", 4)

返回

n
1 0

为零,因此输出错误。

在内部运行代码,而不使用相同的参数包装函数

df %>%
select(team_size) %>%
filter(team_size == 4) %>%
count()

返回
n
1 12

,这是正确的输出(12个观察值,team_size等于4)。

我将问题缩小到sample_size_finder(变量,值)函数中的变量参数。以下是我目前所做的尝试:

  • 将函数改为只有"value";作为论据。这给出了期望的输出,但我想要有变量"参数包括
  • 将函数更改为只有"变量";作为论据。返回"0";作为输出
  • 运行该函数,但没有添加"变量";在字符串引号中。返回"0";作为输出

我几乎准备放弃,只使用没有函数的代码,但不知何故,这让我很困扰。如果有好心人能帮助我,我将不胜感激:)

祝你一切顺利。马提亚

使用.data访问列名称的变量名称功能。

library(dplyr)
sample_size_finder <-  function(variable, value){
df %>% 
select(.data[[variable]]) %>%
filter(.data[[variable]] == value) %>%
count()
}
sample_size_finder("team_size", 4)

以R为基底可以写成-

sample_size_finder <-  function(variable, value){
sum(df[[variable]] == value)
}

我们可以将acrossall_of结合使用

library(dplyr)
sample_size_finder <-  function(variable, value){
df %>% 
select(all_of(variable)) %>%
filter(across(all_of(variable), ~ . == value)) %>%
count()
}
sample_size_finder("team_size", 4)

相关内容

  • 没有找到相关文章

最新更新