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

Я написал функцию для создания графиков, которая выглядит примерно так:

getSecPlot <- function(data, xvar, yvar, yvarsec, groupvar, ...){

  sec_plot <- ggplot(data, aes_string (x = xvar, group = groupvar)) +
      geom_col(aes_string(y = yvar, fill = groupvar, alpha = 0.5), position = "dodge") +
      geom_line(aes(y = yvarsec,  color = gender)) 

  }

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

  sec_plot <- ggplot(data, aes_string (x = xvar, group = 1)) +
      geom_col(aes_string(y = yvar), fill = "green") +
      geom_line(aes(y = yvarsec,  color = gender)) 

Итак, я хотел бы объединить это в одну функцию. Что-то вроде:

getSecPlot <- function(data, xvar, yvar, yvarsec, ...){

if (exists groupvar){

  sec_plot <- ggplot(data, aes_string (x = xvar, group = groupvar)) +
      geom_col(aes_string(y = yvar, fill = groupvar, alpha = 0.5), position = "dodge") +
      geom_line(aes(y = yvarsec,  color = gender)) 

} else {

      sec_plot <- ggplot(data, aes_string (x = xvar, group = 1)) +
          geom_col(aes_string(y = yvar), fill = "green") +
          geom_line(aes(y = yvarsec,  color = gender)) 

  }

if (exists groupvar) только для иллюстрации - как я могу проверить, был ли задан аргумент в R?

Я не уверен в том, как работает ... , Как только я извлек groupvar из аргумента функции, функция больше не работала:

getSecPlot <- function(data, xvar, yvar, yvarsec, ...){

  sec_plot <- ggplot(data, aes_string (x = xvar, group = groupvar)) +
      geom_col(aes_string(y = yvar, fill = groupvar, alpha = 0.5), position = "dodge") +
      geom_line(aes(y = yvarsec,  color = gender)) 

  }

plot.SeverityYearly <- getSecPlot(freqSevDataAge, xvar = "agegroup", yvar = "severity", yvarsec = "frequency", groupvar = "gender")

Ошибка в aes_string (x = xvar, group = groupvar): объект 'groupvar' не найдено

1 Ответ

1 голос
/ 19 апреля 2020

Вы можете использовать missing, чтобы проверить, присутствует ли group_var. Посмотрите на этот простой пример:

temp <- function(a, b, group_var) {
   if(missing(group_var))
      a + b
   else
      a + b + group_var
}

temp(1, 2, 3)
#[1] 6
temp(1, 2)
#[1] 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...