Как обернуть ggplot2 как функцию в R

#r #ggplot2

#r #ggplot2

Вопрос:

Я хочу обернуть следующие коды в виде функции

 ez <- function(x,a) { 
    z<-x^3 1
    return(z)
} 
Q1 <- c(1,2,3,4,5)
ggplot(tibble(x = c(-10, 10)), aes(x))  
    map(1:length(Q1), 
        ~stat_function(fun = ez, aes(color = paste0("sand ", .)), args=list(a = Q1[.]))) 

Эти коды создают несколько кривых, но они ПЕРЕКРЫВАЮТСЯ, и это не имеет значения.

Я хочу сгенерировать такую функцию, как эта

    plot <- function(a) {
Q1 <- c(1,2,3,4,5)
 ggplot(tibble(x = c(-6, 6)), aes(x))  
      map(1:length(Q1), 
          ~stat_function(fun = ez, aes(color = paste0("sand ", .)), args=list(a = Q1[.])))

}
plot(2, 4, 3,6) 

Комментарии:

1. В чем именно проблема? Насколько я понимаю, ваш код работает нормально и отображает несколько кривых. Однако ваша функция ez не использует параметр a , чтобы он возвращал одинаковые значения для каждого Q или a или .. и кривые перекрываются.

2. Да, коды работают отлично. Я хочу обернуть их в ФУНКЦИЮ

Ответ №1:

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

  1. Передайте значения параметров в виде вектора, т.Е. Поместите его в c(...)
  2. В вашей функции plot просто выполните цикл a

Примечание: я настроил функцию ez так, чтобы она выдавала разные значения (и неперекрывающиеся кривые) в зависимости от a

 ez <- function(x,a) { 
  z<-x^3 a^3
  return(z)
}

library(ggplot2)
library(tibble)
library(purrr)

plot <- function(a) {
  ggplot(tibble(x = c(-6, 6)), aes(x))  
    map(a, 
        ~stat_function(fun = ez, aes(color = paste0("sand ", .)), args=list(a = .)))
  
}
plot(c(2, 4, 3, 6))