R - округлить через параметр в функции - PullRequest
0 голосов
/ 04 мая 2020

Мой фрейм данных выглядит следующим образом

source_df <-
  data.frame(
    id = c(seq(1: 3)),
    nr = c(1.487, 2.2749, 2.9710),
    cn = c("us", "uk", "ca")
  )

У меня есть эта функция для столбцов выбора, и она также должна выбирать значения в десятичных разрядах в параметре round_to

selector <- function(df, colname, round_to = 1) {
  df %>%  
    select(id, colname) %>% 
    mutate(colname = round(colname, round_to))
    rename_at(vars(-id), ~paste0('selected_', .))
}

Если я назову это так way

selector(source_df, c("nr"))

Я получаю ошибку

 Error in round(colname, round_to) : 
  non-numeric argument to mathematical function

Я предполагаю, что это связано с функцией mutate.

1 Ответ

0 голосов
/ 04 мая 2020

Это проблема стандартной оценки. Чтобы снять кавычки с именами переменных, используйте rlang::sym и !!:

selector <- function(df, colname, round_to = 1) {
  df %>%  
    select(id, colname) %>% 
    mutate(colname = round(!!rlang::sym(colname), round_to)) %>%
    rename_at(vars(-id), ~paste0('selected_', .))
}

Вы можете взглянуть на это сообщение в блоге Я написал тему удаления имен кавычек в dplyr

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...