以数据框列名作为 R 中输入的函数

Function with a data frame column name as input in R

在另一个函数中嵌套数据框上的函数操作的最佳方法是什么?我想写一个函数,它接受一个数据框和一个列名,然后在该列上做一些事情,returns 修改后的数据框如下所示:

library(dplyr)

func = function(df, col){
  
  df = df %>% mutate(col = col + 1)
  return(df)
}


new_df = func(cars, 'speed')

但这会引发错误,因为 col 不是函数中的字符串,我不确定如何用字符串以外的函数输入参数替换它。知道如何以最少的努力解决这个问题吗?

要在函数中使用 dplyr 代码,您必须使用 non-standard 求值。在这种情况下,在函数中使用 {{}} 即可。

library(dplyr)

func = function(df, col) {
  
  df = df %>% mutate({{col}} := {{col}} + 1)
  return(df)
}
new_df = func(cars, speed)
head(cars)

#  speed dist
#1     4    2
#2     4   10
#3     7    4
#4     7   22
#5     8   16
#6     9   10

head(new_df)

#  speed dist
#1     5    2
#2     5   10
#3     8    4
#4     8   22
#5     9   16
#6    10   10

您可以在此处阅读有关 non-standard 评估的更多信息 https://dplyr.tidyverse.org/articles/programming.html

我想你的意思是你希望 col 是数字?这样你就可以 + 1。如果这是正确的,请参见下文。

library(dplyr)

func = function(df, col){
  
  df = df %>% mutate(col = as.numeric(col) + 1)
  return(df)
}


new_df = func(cars, 'speed')

另一种方法是使用列名的索引作为函数参数,而不是列的字符串名称。

这可能看起来像

library(dplyr)

func = function(df, col_index){
  
  col_name <- colnames(df)[col_index]

  df = df %>% mutate(col_name = col_name + 1)
  return(df)
}


new_df = func(cars, 2)