我想定义一个函数
factor <- function(var1)
{
df['var1'] <- as.factor(df['var1'])
}
转换变量的类型
,然后像这样factor(var1)
使用而不加引号!
答案 0 :(得分:1)
使用tidyeval方法,可以使用rlang::sym
将字符串转换为符号,然后在mutate
中用!!
取消引用。另请参见this answer。
library(rlang)
library(tidyverse)
# create a test data frame
iris1 <- head(iris) %>%
as.tibble() %>%
mutate(Species = as.character(Species))
iris1
#> # A tibble: 6 x 5
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
str(iris1)
#> Classes 'tbl_df', 'tbl' and 'data.frame': 6 obs. of 5 variables:
#> $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4
#> $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9
#> $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7
#> $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4
#> $ Species : chr "setosa" "setosa" "setosa" "setosa" ...
# build function
myfactor <- function(df, var1)
{
var1 <- sym(var1)
df <- df %>% mutate(!! var1 := as.factor(!! var1))
return(df)
}
myfactor(iris1, 'Species')
#> # A tibble: 6 x 5
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> <dbl> <dbl> <dbl> <dbl> <fct>
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
由reprex package(v0.2.0.9000)于2018-07-02创建。
答案 1 :(得分:0)
您需要使用substitute
来捕获变量名,然后使用deparse
来使它成为名称/字符
facr <- function(var1)
{
v=deparse(substitute(var1))
df[v] <- as.factor(df[[v]])
df
}