Создание функции (data, x) с mutate (x = x * 2) в нем, не работает

#r #dataframe #dplyr

#r #фрейм данных #dplyr

Вопрос:

 library(dplyr)

func <- function(data, col){
  data <- data %>%
    mutate(col = {{col}}*2)
  return(data)
}

df <- data.frame(x = c(1:8), y = c("hello", "world", "sun", "winter"))

func(df, x)
  x      y col
1 1  hello   2
2 2  world   4
3 3    sun   6
4 4 winter   8
5 5  hello  10
6 6  world  12
7 7    sun  14
8 8 winter  16
 

Я хочу, чтобы столбец x был обновлен:

  x      y
1  2  hello
2  4  world
3  6    sun
4  8 winter
5 10  hello
6 12  world
7 14    sun
8 16 winter
 

Я безуспешно пробовал несколько вещей, у кого-нибудь есть какие-либо предложения? Заранее спасибо!

Ответ №1:

Нам нужен оператор присваивания ( := )

 func <- function(data, col){
data %>%
     mutate({{col}} := {{col}}*2)

  }

func(df, x)
 

-вывод

 #    x      y
#1  2  hello
#2  4  world
#3  6    sun
#4  8 winter
#5 10  hello
#6 12  world
#7 14    sun
#8 16 winter
 

Ответ №2:

Это должно сделать это.

 library(dplyr)

df <- data.frame(x = c(1:8), y = c("hello", "world", "sun", "winter"))

func(df, x)

func <- function(data, x){
  data <- data %>%
    mutate(x = {{x}}*2)
  return(data)
}
 

Комментарии:

1. это работает, потому что переменная в функции () имеет то же имя, что и в df ‘x’

Ответ №3:

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

 library(dplyr)

func <- function(data, col){
  data <- data %>%
    mutate({{col}} = {{col}}*2)
  return(data)
}

df <- data.frame(x = c(1:8), y = c("hello", "world", "sun", "winter"))

func(df, x)

output:
   x      y
1  2  hello
2  4  world
3  6    sun
4  8 winter
5 10  hello
6 12  world
7 14    sun
8 16 winter