функция с переменным именем столбца - PullRequest
2 голосов
/ 29 марта 2020

У меня есть функция, которую я неоднократно использую для суммирования информации для отдельных лиц (с уникальными идентификаторами в моих наборах данных. Из-за того, как расположены эти данные, иногда столбец идентификаторов имеет одно имя, а иногда - другое имя. Вместо Имея разные функции для каждого набора данных, я пытаюсь иметь поле IDtype в своей функции, чтобы я мог указать столбец в каждом наборе данных, где находится поле ID. Однако я продолжаю получать следующую ошибку для моей функции ниже:

fun <- function(df, IDtype) {
  df %>%
    group_by(species, IDtype, site) %>%
    summarize(tsMean = mean(ts)) %>%
    arrange(IDtype, tsMean)
}

dfSum <- (fun(data, IDtype = id) #also tried with id in quotes ("id"), but I get the same error 

Error: Column `IDtype` is unknown 

Как мне исправить эту функцию?

Ответы [ 2 ]

3 голосов
/ 29 марта 2020

Для людей, интересующихся data.table, может быть использован следующий синтаксис:

library(data.table)
fun <- function(df, IDtype){
   return(
      df[, .(tsMean = mean(ts)), by = c("species", IDtype, "site")][order(get(IDtype), get("tsMean")]
      )
}
setDT(data)
fun(data, IDtype = "id")

Вы цитируете имена с помощью функции get()

2 голосов
/ 29 марта 2020

Мы можем использовать оператор curly-curly ({{}}) для оценки значения без кавычек

fun <- function(df, IDtype) {
  df %>%
     group_by(species, {{IDtype}}, site) %>%
     summarize(tsMean = mean(ts)) %>%
     arrange({{IDtype}}, tsMean)
    }

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