"Dynami c" именование столбца в функции - PullRequest
1 голос
/ 29 мая 2020

Я хотел бы присвоить динамическое c имя, то есть имя переменной, которую я передаю функции, в качестве имени столбца в кадре данных, который создается функцией.

Я пробовал

- deparse(substitute(x))
- toString(x)

, но безуспешно ...

Код

a <- (1:3)
b <- (5:7)

df <- data.frame(a,b)

fun <- function(x){
  x %>% mutate(c=a+b)
  colnames(x)[3] <- deparse(substitute(x))
  }

Ожидаемое поведение

после запуска fun (df):

  a b  df
1 1 5  6
2 2 6  8
3 3 7 10

вместо:

> fun(df)
Error in names(x) <- value : 
  'names' attribute [3] must be the same length as the vector [2]

1 Ответ

1 голос
/ 29 мая 2020

Мы можем использовать := с оценкой (!!)

fun <- function(x){
    nm1 <-  deparse(substitute(x))
     x %>% 
        mutate(!! nm1 := a+b)

   }

fun(df)
#  a b df
#1 1 5  6
#2 2 6  8
#3 3 7 10

В функции OP вывод x %>% mutate не возвращается, поэтому исходный набор данных будет только два столбца, а не три, т.е. если мы сделаем

fun <- function(x){
   nm1 <- deparse(substitute(x))
    x <- x %>% # assign the output after mutate
            mutate(c=a+b)
   colnames(x)[3] <- nm1
   x # return the dataset
  }   


fun(df)
#  a b df
#1 1 5  6
#2 2 6  8
#3 3 7 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...