Построение данных из функции - PullRequest
2 голосов
/ 21 октября 2019

Я хочу построить данные из функции. Например:

Создание данных и загрузка библиотек:

# Load ggplot2
library(ggplot2)

# Create Data
data <- data.frame(
  group=LETTERS[1:5],
  value=c(13,7,9,21,2)
)

Этот график работает так, как задумано:

# Basic piechart
ggplot(data, aes(x="", y=value, fill=group)) +
  geom_bar(stat="identity", width=1, color="white") +
  coord_polar("y", start=0) +

  theme_void() # remove background, grid, numeric labels

Но если я попытаюсь построить изнутри функции:

a <- function(data)
{
  # Basic piechart
  ggplot(data, aes(x="", y=value, fill=group)) +
    geom_bar(stat="identity", width=1, color="white") +
    coord_polar("y", start=0) +

    theme_void() # remove background, grid, numeric labels
  return()
}


a(data)

это просто дает мне вывод:

NULL

без рисования какого-либо графика.

Вопрос: Как сделать рисование графика из функциив моем примере?

пример взят из: https://www.r -graph-gallery.com / piechart-ggplot2.html

1 Ответ

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

Опции, чтобы ваша функция работала.

Опция - I

Удалить строку return (), которая в основном возвращает NULL после завершения функции (ваш график является локальным для функции a, и график недоступенвне функции, и никакие параметры не передаются для возврата).

a <- function(data)
{
  # Basic piechart
  ggplot(data, aes(x="", y=value, fill=group)) +
    geom_bar(stat="identity", width=1, color="white") +
    coord_polar("y", start=0) +
    theme_void() # remove background, grid, numeric labels
}

Option-II

Сохраните график в локальной переменной в функции и верните его по завершении.

a <- function(data)
{
  # Basic piechart
  p <- ggplot(data, aes(x="", y=value, fill=group)) +
    geom_bar(stat="identity", width=1, color="white") +
    coord_polar("y", start=0) +
   theme_void() # remove background, grid, numeric labels
  return(p)
}

Опция - III

Использовать environment = environment(), который явно задает переменную среды для текущей среды при вызове ggplot. Вы можете прочитать больше о Использование ggplot () в другой функции в R .

a <- function(data)
{
  # Basic piechart
  p <- ggplot(data, aes(x="", y=value, fill=group), environment = environment()) 
    p + geom_bar(stat="identity", width=1, color="white") +
    coord_polar("y", start=0) +  

    theme_void() # remove background, grid, numeric labels

}

Теперь вы можете использовать a(data) для печати вывода.

Выход

ego_function

...