Передача имени столбца в качестве аргумента в функции внутри каналов

#function #dplyr #tidyverse

Вопрос:

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

Используя более классический, но, возможно, немного неуклюжий подход, я могу это сделать:

 var = "Sepal.Width"  scale_fun1 = function(dat,var) {    dat[,"new_var"] = dat[,var]*100    return(dat)   }  scale_fun1(iris,var)   

Я думал, что это будет просто с использованием канала, но это оказалось сложнее, чем я думал, так как, когда функция передает var канала, она не анализирует его должным образом, что приводит к ошибке нечислового аргумента двоичного оператора. Как это можно исправить, пожалуйста?

 var = "Sepal.Width"  scale_fun2 = function(dat,var) {    iris %gt;% dplyr::mutate(new_variable = var * 100)   }  scale_fun2(iris,var)   

Ответ №1:

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

Вот линия:

 mutate(new_variable = !!sym(var) * 100)  

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

1. Привет. Спасибо за ваш вклад. Я ознакомлюсь с нестандартной оценкой. Я попытался: iris %gt;% dplyr::mutate(new_variable = !!var * 100) но это не сработало.

2. прошу прощения, попробуйте мое редактирование

3. Спасибо. Это работает. Мне действительно нужно знать эти вещи….!