首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R函数来计算平均值,标准差或中位数,但比较似乎不起作用,有没有更好的方法?

R函数来计算平均值,标准差或中位数,但比较似乎不起作用,有没有更好的方法?
EN

Stack Overflow用户
提问于 2020-10-31 09:08:28
回答 2查看 66关注 0票数 0

如果if else语句中的x是函数,我该如何计算?

代码语言:javascript
运行
复制
   library(dplyr)
    stat_mtcars <- function(x) {
      if (x == mean) {
        wht_stat <-  "Mean"
      } else if(x == sd) {
        wht_stat <- "sd"
      } else if(x == median) {
        wht_stat <- "Median" 
      }
      output <- mtcars %>% 
        summarise(wht_stat = x(mpg))
      output
    }
    
    stat_mtcars(mean)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-31 09:17:56

您不需要做任何特殊的事情,您可以直接传递函数名并应用它们。

代码语言:javascript
运行
复制
library(dplyr)
library(rlang)

stat_mtcars <- function(x) {
  fun <- deparse(substitute(x))
  mtcars %>% 
    summarise(!!paste0(fun, '_stat') := x(mpg))
}

stat_mtcars(mean)
#  mean_stat
#1  20.09062

#Check output
mtcars %>% 
  summarise(wht_stat = mean(mpg))
#  wht_stat
#1 20.09062

stat_mtcars(sd)
#   sd_stat
#1 6.026948
票数 1
EN

Stack Overflow用户

发布于 2020-10-31 09:19:39

我们可以使用rlang来帮助:

代码语言:javascript
运行
复制
library(dplyr)
library(rlang)
stat_mtcars <- function(x) {
  output <- mtcars %>% 
    summarise({{x}} := x(mpg))
  output
}

stat_mtcars(mean)

##      mean
## 1 20.09062

对于这个问题,我们可以使用deparse(substitute(x))来使用提供给函数的内容。

代码语言:javascript
运行
复制
is_mean = function(x) {
  x_sub = substitute(x)
  deparse(x_sub) == 'mean'
}
is_mean(mean)
#> [1] TRUE
is_mean(meany)
#> [1] FALSE
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64617501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档