Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r/dplyr:在UDF中使用动态命名的变量_R_Dplyr_User Defined Functions - Fatal编程技术网

r/dplyr:在UDF中使用动态命名的变量

r/dplyr:在UDF中使用动态命名的变量,r,dplyr,user-defined-functions,R,Dplyr,User Defined Functions,我对使用dplyr编写用户定义函数有些陌生,我希望在函数中使用动态定义的变量。我已经得到了一部分的方式与文件,但我担心我可能没有正确的命名法,以找到我要做的事情 我想定义一个函数,它在mutate调用中创建一个变量,然后在其他调用中使用该变量。比如说, library(tidyverse) library(PropCIs) for_share_plot <- function(data, dummy, group_var){ dummy_sum <- paste0(quo

我对使用
dplyr
编写用户定义函数有些陌生,我希望在函数中使用动态定义的变量。我已经得到了一部分的方式与文件,但我担心我可能没有正确的命名法,以找到我要做的事情

我想定义一个函数,它在
mutate
调用中创建一个变量,然后在其他调用中使用该变量。比如说,

library(tidyverse)
library(PropCIs)

for_share_plot <- function(data, dummy, group_var){

    dummy_sum <- paste0(quo_name(enquo(dummy)), "_sum")

    data %>% 
       mutate("{{dummy}}_sum" := sum({{dummy}})) %>% 
       mutate("{{dummy}}_prop" := (!!dummy_sum)/{{group_var}},
              "{{dummy}}_lowerci" := scoreci(!!dummy_sum, {{group_var}}, conf.level = 0.95)$conf.int[1],
              "{{dummy}}_upperci" := scoreci(!!dummy_sum, {{group_var}}, conf.level = 0.95)$conf.int[2])
}

df <- mtcars %>%
    add_count(cyl, name = 'group_n') %>%
    group_by(cyl) %>%
    for_share_plot(data = ., dummy = am, group_var = group_n)

我知道它将
{{dummy}}}u prop的第一个输入解释为字符串,但我不知道如何从上面引用先前定义的列。任何指导都将不胜感激。

您正确地识别了
伪值\u sum
是一个字符串,因此您可以将其转换为
的符号
可以使用
sym()
命令进行计算

尝试对代码进行以下修改:

for_share_plot <- function(data, dummy, group_var){

    dummy_sum <- sym(paste0(quo_name(enquo(dummy)), "_sum"))

    data %>% 
       mutate("{{dummy}}_sum" := sum({{dummy}})) %>% 
       mutate("{{dummy}}_prop" := (!!dummy_sum)/{{group_var}},
              "{{dummy}}_lowerci" := scoreci(!!dummy_sum, {{group_var}}, conf.level = 0.95)$conf.int[1],
              "{{dummy}}_upperci" := scoreci(!!dummy_sum, {{group_var}}, conf.level = 0.95)$conf.int[2])
}
用于共享图%
mutate(“{{dummy}}}{u prop”:=(!!dummy}u sum)/{{group}u var},
“{{dummy}}{u lowerci”:=scoreci(!!dummy{u sum,{{group{u var}},conf.level=0.95)$conf.int[1],
“{{dummy}}{u upperci”:=scoreci(!!dummy{u sum,{{group{u var}},conf.level=0.95)$conf.int[2])
}

您可以使用
.data
代词来表示列名

library(dplyr)
library(PropCIs)

for_share_plot <- function(data, dummy, group_var){
  
  dummy_sum <- paste0(quo_name(enquo(dummy)), "_sum")
  
  data %>% 
    mutate("{{dummy}}_sum" := sum({{dummy}}),
           "{{dummy}}_prop" := .data[[dummy_sum]]/{{group_var}},
           "{{dummy}}_lowerci" := scoreci(.data[[dummy_sum]], {{group_var}}, conf.level = 0.95)$conf.int[1],
           "{{dummy}}_upperci" := scoreci(.data[[dummy_sum]], {{group_var}}, conf.level = 0.95)$conf.int[2])
}

mtcars %>%
  add_count(cyl, name = 'group_n') %>%
  group_by(cyl) %>%
  for_share_plot(dummy = am, group_var = group_n)
库(dplyr)
图书馆(PropCIs)
对于\u共享\u绘图%
添加计数(循环,名称='组''>%
组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别
对于共享图(虚拟=am,组变量=组n)
library(dplyr)
library(PropCIs)

for_share_plot <- function(data, dummy, group_var){
  
  dummy_sum <- paste0(quo_name(enquo(dummy)), "_sum")
  
  data %>% 
    mutate("{{dummy}}_sum" := sum({{dummy}}),
           "{{dummy}}_prop" := .data[[dummy_sum]]/{{group_var}},
           "{{dummy}}_lowerci" := scoreci(.data[[dummy_sum]], {{group_var}}, conf.level = 0.95)$conf.int[1],
           "{{dummy}}_upperci" := scoreci(.data[[dummy_sum]], {{group_var}}, conf.level = 0.95)$conf.int[2])
}

mtcars %>%
  add_count(cyl, name = 'group_n') %>%
  group_by(cyl) %>%
  for_share_plot(dummy = am, group_var = group_n)