以数据框列名作为 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)
在另一个函数中嵌套数据框上的函数操作的最佳方法是什么?我想写一个函数,它接受一个数据框和一个列名,然后在该列上做一些事情,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)