R 有没有办法将列名指定为参数?

R 有没有办法将列名指定为参数?,r,function,arguments,R,Function,Arguments,假设我想创建一个复制所选列的函数,作为示例 testdata <- data.frame( "diff1" = c(seq(1:10)), "diff2" = c(seq(21:30)) ) goal <- testdata %>% mutate(newdiff1 = diff1) 这种格式有效 nondesiredformat <- funtest(testdata,testdata$diff1,newdiff1) nondesiredformat在函

假设我想创建一个复制所选列的函数,作为示例

testdata <- data.frame(
  "diff1" = c(seq(1:10)),
  "diff2" = c(seq(21:30))
)

goal <- testdata %>%
  mutate(newdiff1 = diff1)
这种格式有效

nondesiredformat <- funtest(testdata,testdata$diff1,newdiff1)

nondesiredformat在函数中,我们可以使用
{{}
进行评估,即
+
enquo
对于传递到函数中的无引号变量名和赋值,请使用
:=
而不是
=

funtest <- function(dat,var,newvar){
   dat %>%
     mutate({{newvar}} := {{var}})
        }
funtest(testdata, diff1, newdiff1)
#    diff1 diff2 newdiff1
#1      1     1        1
#2      2     2        2
#3      3     3        3
#4      4     4        4
#5      5     5        5
#6      6     6        6
#7      7     7        7
#8      8     8        8
#9      9     9        9
#10    10    10       10
funtest%
突变({newvar}}:={{{var}})
}
funtest(testdata、diff1、newdiff1)
#diff1 diff2 newdiff1
#1      1     1        1
#2      2     2        2
#3      3     3        3
#4      4     4        4
#5      5     5        5
#6      6     6        6
#7      7     7        7
#8      8     8        8
#9      9     9        9
#10    10    10       10

在函数中,我们可以使用
{{}
进行评估,即
+
enquo
对于传递到函数中的无引号变量名和赋值,请使用
:=
而不是
=

funtest <- function(dat,var,newvar){
   dat %>%
     mutate({{newvar}} := {{var}})
        }
funtest(testdata, diff1, newdiff1)
#    diff1 diff2 newdiff1
#1      1     1        1
#2      2     2        2
#3      3     3        3
#4      4     4        4
#5      5     5        5
#6      6     6        6
#7      7     7        7
#8      8     8        8
#9      9     9        9
#10    10    10       10
funtest%
突变({newvar}}:={{{var}})
}
funtest(testdata、diff1、newdiff1)
#diff1 diff2 newdiff1
#1      1     1        1
#2      2     2        2
#3      3     3        3
#4      4     4        4
#5      5     5        5
#6      6     6        6
#7      7     7        7
#8      8     8        8
#9      9     9        9
#10    10    10       10

您可以使用bquote进行以下操作:

eval(bquote(
  dat %>% 
    mutate(.(newvar) := .(var))
))
你也可以在你的特殊情况下更新旧学校

dat[[newvar]] = dat[[var]]

您可以使用bquote进行以下操作:

eval(bquote(
  dat %>% 
    mutate(.(newvar) := .(var))
))
你也可以在你的特殊情况下更新旧学校

dat[[newvar]] = dat[[var]]

如果您开始使用带有参数的变量名编写函数,您可能会发现
data.table
dplyr
更方便。我最近写了一篇文章。在我看来,标准评估更容易处理
数据。表
dplyr
更容易处理

使用
data.table
,您有几种方法将列名用作参数

使用get 您可以使用
get
将名称与特定范围内的值进行映射。这里的范围是您的
数据。表

库(data.table)

funtest如果您开始编写带有参数的变量名函数,您可能会发现
data.table
dplyr
更方便。我最近写了一篇文章。在我看来,标准评估更容易处理
数据。表
dplyr
更容易处理

使用
data.table
,您有几种方法将列名用作参数

使用get 您可以使用
get
将名称与特定范围内的值进行映射。这里的范围是您的
数据。表

库(data.table)
有趣的