首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于quosure命名新变量

基于quosure命名新变量
EN

Stack Overflow用户
提问于 2017-07-03 20:04:28
回答 1查看 677关注 0票数 8

我试图编写一个自定义函数,它将根据预定义变量向量(例如vector_heavy)的值计算一个新变量,然后根据提供给该函数的参数(例如,custom_name)命名新变量。

这个变量命名是我的质量技能让我失望的地方。任何帮助都是非常感谢的。

代码语言:javascript
复制
library(tidyverse)

vector_heavy <- quos(disp, wt, cyl)

cv_compute <- function(data, cv_name, cv_vector){
  cv_name <- enquo(cv_name)
  data %>% 
    rowwise() %>% 
    mutate(!!cv_name = mean(c(!!!cv_vector), na.rm = TRUE)) %>% 
    ungroup()
}

d <- cv_compute(mtcars, cv_name = custom_name, cv_vector = vector_heavy)

我的错误消息是:

代码语言:javascript
复制
Error: unexpected '=' in:
"    rowwise() %>% 
    mutate(!!cv_name ="

!!中删除cv_name之前的mutate()将导致一个函数计算一个名为cv_name的新变量,而忽略了作为参数包含的custom_name

代码语言:javascript
复制
cv_compute <- function(data, cv_name, cv_vector){
  cv_name <- enquo(cv_name)
  data %>% 
    rowwise() %>% 
    mutate(cv_name = mean(c(!!!cv_vector), na.rm = TRUE)) %>% 
    ungroup() 
}

如何让这个函数利用我提供的custom_name作为cv_name的参数

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-03 20:17:43

您需要在:=中使用mutate助手。您还需要quo_name将输入转换为字符串。

然后,函数的mutate行将如下所示

mutate(!!quo_name(cv_name) := mean(c(!!!cv_vector), na.rm = TRUE))

全部:

代码语言:javascript
复制
cv_compute <- function(data, cv_name, cv_vector){
     cv_name <- enquo(cv_name)
     data %>% 
          rowwise() %>% 
          mutate(!!quo_name(cv_name) := mean(c(!!!cv_vector), na.rm = TRUE)) %>% 
          ungroup()
}

cv_compute(mtcars, cv_name = custom_name, cv_vector = vector_heavy)

    mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb custom_name
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>       <dbl>
1  21.0     6   160   110  3.90 2.620 16.46     0     1     4     4    56.20667
2  21.0     6   160   110  3.90 2.875 17.02     0     1     4     4    56.29167
3  22.8     4   108    93  3.85 2.320 18.61     1     1     4     1    38.10667
4  21.4     6   258   110  3.08 3.215 19.44     1     0     3     1    89.07167
5  18.7     8   360   175  3.15 3.440 17.02     0     0     3     2   123.81333
6  18.1     6   225   105  2.76 3.460 20.22     1     0     3     1    78.15333
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44893169

复制
相关文章

相似问题

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