RMarkdown - функция с ggplotly - PullRequest
       37

RMarkdown - функция с ggplotly

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

Я бы хотел получить график в RMarkdown, используя мою функцию test1(). В функции я использую функцию cat() и ggplotly(), и я понял, что использование cat() является основной проблемой в данном случае. Когда я удаляю все коды с cat(), я получаю то, что хочу (test2()). Но для меня важно использовать cat(), потому что я могу создавать параграфы и комментарии в test1(). Что можно изменить в test1() и в test_ggplotly.Rmd ?

test_ggplotly.R

library("ggplot2")
library("plotly")

test1<-function(){

  cat('\n')  
  cat("## Chapter 1", "\n") 
  cat("### Example ", "\n") 
  cat(" Comment ", "\n") 
  cat('\n') 

  p1<-ggplot(mpg, aes(x = displ, y = hwy, color = class)) + geom_point()
  ggplotly(p1)

  cat('\n')   
}


test2<-function(){

  p1<-ggplot(mpg, aes(x = displ, y = hwy, color = class)) + geom_point()
  ggplotly(p1)
}

test_ggplotly.Rmd

---
title: "Test"
author: " "
date: "10/14/2019"
output: html_document
---
``* {r setup, include=FALSE,echo=FALSE}
knitr::opts_chunk$set(echo = TRUE)
``

``{R, echo=FALSE}
source("test_ggplotly.R")
``
``
# Test 1
``{r, results='asis', echo=FALSE}
test1()
``
# Test 2
``{r, results='asis', echo=FALSE}
test2()
``
* should be ```

Ответы [ 2 ]

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

Вам нужно указать R, какой объект вернуть в функции test1:

test1<-function(){

        cat('\n')  
        cat("## Chapter 1", "\n") 
        cat("### Example ", "\n") 
        cat(" Comment ", "\n") 
        cat('\n') 

        p1<-ggplot(mpg, aes(x = displ, y = hwy, color = class)) + geom_point()
        return( ggplotly(p1) )

        cat('\n')
}
0 голосов
/ 15 октября 2019

РЕДАКТИРОВАНИЕ 16/10/19: # 2 Для Rmarkdown я использую список в качестве обходного пути, это может быть конкретный вопрос, поэтому здесь, чтобы найти лучшие результаты.

1 вызов plotly::ggploty() действительно был забыт,В приведенном ниже коде должны отображаться требуемые графики.

Давайте переформатируем ваш вопрос:

test1<-function(){

        library(ggplot2)

        for(i in 1:4){
                cat('\n')
                cat("## Chapter ", i, "\n") 
                cat("### Exampstle ", "\n") 
                cat(" Comment ", "\n") 
                cat('\n') 

                p1 <- ggplot(mpg, aes(x = displ, y = hwy, color = class)) + 
                        geom_point() + 
                        ggtitle(paste("Chart nr ", i))

                return(p1)

                cat('\n') 
        }
}
test1()

Если вы хотите только напечатать вывод, вы можете использовать print вместо возврата значения:

test1<-function(){

        library(ggplot2)

        res <- NULL

        for(i in 1:4){
                cat('\n')
                cat("## Chapter ", i, "\n") 
                cat("### Exampstle ", "\n") 
                cat(" Comment ", "\n") 
                cat('\n') 

                p1 <- ggplot(mpg, aes(x = displ, y = hwy, color = class)) + 
                        geom_point() + 
                        ggtitle(paste("Chart nr ", i))

                p1 <- plotly::ggplotly( p1 )

                res[[i]] <-p1 
        }
        return(res)
}
my_res <- test1()

my_res[[1]]
my_res[[2]]
my_res[[3]]
my_res[[4]]

В противном случае сохраняйте каждую итерацию в списке, например, p1[[i]] = ggplot() ... для последующего вызова.

...