Аргументы не передаются правильно для работы в R - PullRequest
0 голосов
/ 14 октября 2019

Я написал свою первую функцию, но она не работает. Я получаю сообщение об ошибке: Ошибка: столбец var1 неизвестен при запуске функции.

Редактировать: приведенный ниже код является частью большего фрагмента кода, который также создает график, но эта часть работает.

Код:

# Creating dummydata
a <- sample(letters[1:5], 500, rep = TRUE)
b <- sample(1:10, 500, rep = TRUE)
df1 <- data.frame(a, b)

create_barchart <- function(data, var1, var2) {
  # Creating summary statistics
  df <- data %>%
    group_by(var1, var2) %>%
    summarise(n=n()) %>%
    group_by(var1) %>%
    mutate(perc=100*n/sum(n))
}

create_barchart(df1, a, b)

Ответы [ 2 ]

2 голосов
/ 15 октября 2019

Поместите {{...}} вокруг var1 и var2 и удалите df <-. Рекомендуется использовать ungroup для завершения group_by.

Также обратите внимание, что count({{var1}}, {{var2}}) может использоваться вместо group_by({{var1}}, {{var2}}) %>% summarize(n = n()) %>% ungroup.

library(dplyr)

create_barchart <- function(data, var1, var2) {
  # Creating summary statistics
  data %>%
    group_by({{var1}}, {{var2}}) %>%
    summarise(n=n()) %>%
    ungroup %>%
    group_by({{var1}}) %>%
    mutate(perc=100*n/sum(n)) %>%
    ungroup
}

create_barchart(df1, a, b)
0 голосов
/ 15 октября 2019

В дополнение к ответу Гротендика вы можете использовать пару enquo() - !! (произносится как "Bang Bang")

create_barchart <- function(data, var1, var2) {
  var1 <- enquo(var1)
  var2 <- enquo(var2)
  # Creating summary statistics
  df <- data %>%
    group_by(!!var1, !!var2) %>%
    summarise(n=n()) %>%
    group_by(!!var1) %>%
    mutate(perc=100*n/sum(n))
  return(df)
}

create_barchart(data = df1, var1 = a, var2 = b)

Для более подробного объяснения вы также можете увидеть это Блогпост . Надеюсь, это поможет.

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