R 以后在函数中使用粘合字符串

R 以后在函数中使用粘合字符串,r,function,dplyr,tidyeval,quasiquotes,R,Function,Dplyr,Tidyeval,Quasiquotes,所以这很有效: my_summarise5 <- function(data, mean_var ) { data %>% mutate( "mean_{{mean_var}}" := mean({{ mean_var }}), ) } mtcars %>% my_summarise5(cyl) 在“mean{{{{mean{u var}}}{u plusone:”=“mean{{{{mean{u var}}”+1部

所以这很有效:

my_summarise5 <- function(data, mean_var ) {
  data %>% 
    mutate(
      "mean_{{mean_var}}" := mean({{ mean_var }}), 
    ) 
}

mtcars %>% my_summarise5(cyl)
“mean{{{{mean{u var}}}{u plusone:”=“mean{{{{mean{u var}}”+1
部分中的一些“粘贴”或“粘合”的东西可以解决这个问题吗

注意这显然不是一个有用的例子,它是语法的一个MWE。我实际上想定义两个不同名称的新列,一个使用另一个。。。否则,我必须重复,它也会变得混乱。

使用:

my_summarise5 <- function(data, mean_var ) {
  data %>% 
    mutate(
      "mean_{{mean_var}}" := mean({{ mean_var }}),
      across(last_col(), ~.+1, .names = "{col}_plusone")
    )
}

mtcars %>% my_summarise5(cyl) %>% head

我喜欢tidyverse,但是通过使代码可读性和可维护性,使用BaseR可以获得巨大的回报

我的总结和“.names”也是我忘了的东西!
Error: Problem with `mutate()` input `mean_cyl_plusone`.
x non-numeric argument to binary
my_summarise5 <- function(data, mean_var ) {
  data %>% 
    mutate(
      "mean_{{mean_var}}" := mean({{ mean_var }}),
      across(last_col(), ~.+1, .names = "{col}_plusone")
    )
}

mtcars %>% my_summarise5(cyl) %>% head
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb mean_cyl mean_cyl_plusone
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4   6.1875           7.1875
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4   6.1875           7.1875
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1   6.1875           7.1875
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1   6.1875           7.1875
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2   6.1875           7.1875
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1   6.1875           7.1875
tmp <- data.frame(a = 1:5)
my_summarise5(tmp, "a")
##   a mean_a mean_a_plus_one
## 1 1      3               4
## 2 2      3               4
## 3 3      3               4
## 4 4      3               4
## 5 5      3               4