R函数:在函数中使用参数作为名称

R函数:在函数中使用参数作为名称,r,function,dplyr,R,Function,Dplyr,我在R中创建了一个用户函数,将两列相乘以创建第三列(在一个系列中),因此该函数将创建4个新列 create_mult_var <- function(.data){ .data <-.data%>% mutate(Q4_1_4 = Q4_1_2_TEXT*Q4_1_3_TEXT) %>% mutate(Q4_2_4 = Q4_2_2_TEXT*Q4_2_3_TEXT) %>% mutate(Q4_3_4 = Q4_3_2_TEXT*Q4

我在R中创建了一个用户函数,将两列相乘以创建第三列(在一个系列中),因此该函数将创建4个新列

create_mult_var <- function(.data){
  .data <-.data%>%
    mutate(Q4_1_4 = Q4_1_2_TEXT*Q4_1_3_TEXT) %>% 
    mutate(Q4_2_4 = Q4_2_2_TEXT*Q4_2_3_TEXT) %>%
    mutate(Q4_3_4 = Q4_3_2_TEXT*Q4_3_3_TEXT) %>%
    mutate(Q4_4_4 = Q4_4_2_TEXT*Q4_4_3_TEXT)
  .data

或者类似的东西来创建这些新列?任何建议都将不胜感激!非常感谢。如果这是一个坏主意,有没有关于我应该如何处理这个问题的建议?

我们可以使用
粘贴
并使用
进行评估

create_mult_var_2 <- function(.data, pat){
  .data <-.data%>%
    mutate(!! str_c(pat, '_1_4') :=
    !! rlang::sym(str_c(pat, '_1_2_TEXT')) *
    !! rlang::sym(str_c(pat, '_1_3_TEXT')))
  .data 
 }

create_mult_var_2(data_in, "Q4")
#  Q4_1_2_TEXT Q4_1_3_TEXT Q4_1_4
#1           1           5      5
#2           2           6     12
#3           3           7     21
#4           4           8     32
数据
data\u,谢谢!创建一个变量(Q4_1_4)很方便,我需要为每个问题类型(Q4_2_4、Q4_3_4和Q4_4_4)创建4个变量,Q4。我修改了您的答案以创建所有四个,但我得到一个错误:@NewBee错误是什么?我只展示了一个,因为它更容易复制/粘贴和创建更多!!rlang::sym(str_c(pat,:找不到函数):=“@NewBee你能试试这个函数吗
create_mult\u var\u 3
非常感谢你的帮助!!!
create_mult_var <- function(.data,question){
   .data <-.data%>%
   mutate(question_1_4 = question_1_2_TEXT*question_1_3_TEXT) %>% 
   mutate(question_2_4 = question_2_2_TEXT*question_2_3_TEXT) %>%
   mutate(question_3_4 = question_3_2_TEXT*question_3_3_TEXT) %>%
   mutate(question_4_4 = question_4_2_TEXT*question_4_3_TEXT)
  .data
   
}
data_in %>% create_mult_var("Q4") %>% create_mult_var("Q8") 
create_mult_var_2 <- function(.data, pat){
  .data <-.data%>%
    mutate(!! str_c(pat, '_1_4') :=
    !! rlang::sym(str_c(pat, '_1_2_TEXT')) *
    !! rlang::sym(str_c(pat, '_1_3_TEXT')))
  .data 
 }

create_mult_var_2(data_in, "Q4")
#  Q4_1_2_TEXT Q4_1_3_TEXT Q4_1_4
#1           1           5      5
#2           2           6     12
#3           3           7     21
#4           4           8     32
library(dplyr)
library(stringr)
create_mult_var_3 <- function(.data, pat) {
  .data %>%
    mutate(across(matches(str_c("^", pat, "_\\d+_2")), ~
               .* get(str_replace(cur_column(), '_2_TEXT', '_3_TEXT')),
         .names =  '{.col}_new')) %>%
    rename_at(vars(ends_with('_new')),
        ~ str_replace(., '\\d+_TEXT_new', '4'))



}
create_mult_var_3(data_in, "Q4")
#  Q4_1_2_TEXT Q4_1_3_TEXT Q4_1_4
#1           1           5      5
#2           2           6     12
#3           3           7     21
#4           4           8     32  
        
data_in <- data.frame(Q4_1_2_TEXT = 1:4, Q4_1_3_TEXT = 5:8)