関数内の列の名前を、この関数の引数として渡された名前に変更したい。基本的に、私は機能を持っています
produce_data_frame <- function(name) {
return(iris)
}
そして、私はこの関数がSepal.length列の名前を 'name'に変更することを望んでいます(nameはnameの値を取ります)次のような別のことを試しました
produce_data_frame <- function(name) {
name <- enquo(name)
iris %>%
rename((!!name) = Sepal.Length) %>%
return()
}
そして電話するとき
produce_data_frame("newName")
NewNameという名前のSepal.Length列を持つiris data.frameを取得したいと思います。しかし、NSEに対する私の理解はまだ非常に基本的であり、コンパイルすらできません。
あなたが試すことができます
library(tidyverse)
produce_data_frame <- function(name) {
iris %>%
as.tibble() %>%
select(!!quo_name(name) := Sepal.Length)
}
produce_data_frame("new_name")
#> # A tibble: 150 x 1
#> new_name
#> <dbl>
#> 1 5.10
#> 2 4.90
#> 3 4.70
#> 4 4.60
#> 5 5.00
#> 6 5.40
#> 7 4.60
#> 8 5.00
#> 9 4.40
#> 10 4.90
#> # ... with 140 more rows
reprexパッケージ (v0.2.0)によって2018-04-04に作成されました。
異なる入力変数と出力変数Programming with dplyrビネットの場合、:=
演算子:
library(dplyr)
library(rlang)
produce_data_frame <- function(name) {
name = quo_name(name)
iris %>%
rename(!!name := Sepal.Length)
}
produce_data_frame('test') %>% colnames()
#> [1] "test" "Sepal.Width" "Petal.Length" "Petal.Width"
#> [5] "Species"
代わりにベースR names()
を使用できます。
produce_data_frame <- function(name) {
temp_df <- iris
names(temp_df)[names(temp_df) == "Sepal.Length"] <- name
return(temp_df)
}
produce_data_frame("newName")
# newName Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa