#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. Спасибо. Это работает. Мне действительно нужно знать эти вещи….!