Shiny Server missing charts generated by R markdown file - r

I have an R markdown file which I'd like to be available on my corporate Shiny Server.
According to R Markdown: The Definitive Guide I can add runtime: shiny to the YAML metadata at the top of the Rmd file to turn it into a Shiny document. I have done this and it works. If I click "Run Document" in RStudio it will run the Rmd and I will see the report with no problems.
My project is located in the ShinyApps directory where the Shiny Server is looking for apps to serve. When I hit the URL for this project I get the report without any charts. I just get broken image icons where the charts should be. (I am using RStudio Server so it is the exact same files being accessed by RStudio and Shiny Server).
R version 3.4.3, Shiny Server version 1.5.6.875
UPDATE: I have reproduced the behaviour with the simplest possible example. I created a new RStudio project - just a plain project - called TEST located in my ShinyApps directory. Then I created a new R Markdown file, which I called TEST.Rmd. This file is pre-populated with example RMarkdown using the cars and pressure built-in datasets. I changed the YAML header to include runtime: shiny. The RStudio "knit" button is replaced by the "Run Document" button, as expected, and clicking this runs the document and works as expected. Attempting to view the page via the Shiny Server has the same issue whereby the plot is not included; a broken image icon takes its place.
UPDATE 2: As requested, here is the Markdown file. It is literally the sample file generated by RStudio with the addition of runtime: shiny in the YAML header.
---
title: "Test RMarkdown"
author: "Michael Henry"
date: "4/6/2020"
output: html_document
runtime: shiny
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## R Markdown
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.
When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
```{r cars}
summary(cars)
```
## Including Plots
You can also embed plots, for example:
```{r pressure, echo=FALSE}
plot(pressure)
```
Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.
UPDATE 3: So I went hunting around the server looking for a log file for Shiny Server. I do not have any administrator privileges so I've never looked for this before, but I found a log file which included this: /lib64/libpango-1.0.so.0: undefined symbol: g_log_structured_standard. It turns out there is a bug in RHEL which has a fix available so I have put a request in with my administrator to apply the fix. I will report back after this has been applied as to whether it resolved my issue.
UPDATE 4: It turns out my RHEL server is up-to-date; it already has the version of glib2 suggested by the bugfix. The fact that I am still getting this error is therefore something that my administrator is going to escalate to Red Hat.
UPDATE 5: The Red Hat support suggested there was another glib2 so file lying around and it turned out that this was the case. Removing this file resolved the issue!

So, I think you might need to add some extra code to make the markdown application run as you expect in the Shiny Server environment
try wrapping the charts and plots with the following:
renderPlot({})
This gives the server an order to both run the plot and then make it available to the Shiny document. Shiny is a weird thing to straight up R programmers.
You are basically computing and creating things in an R environment and handing them off to a Javascript/HTML one which needs to know in its own language what to do. That renderPlot({}) tells the JS component how to promote the R output to your page.
You can see from this section of the reference document you linked to what the format is and how it is promoted to the page by Shiny.
If you are still stuck after doing this, reach back out and I will try to help trouble shoot!

Searching for the error message: /lib64/libpango-1.0.so.0: undefined symbol: g_log_structured_standard led to a known issue with RHEL whereby there was an older version of glib2 on the system that did not contain the symbol g_log_structured_standard. In my case the server was up-to-date and had the correct version of glib2, but there was another version of this library lying around which was causing the issue.
The moral of the story: search for the log files early and follow the leads contained therein!

Related

Page not rendering if Rmd file not changed

I have an application created with flexdashboard. I included my R code in different chunks as it supposed to be (along with shiny and flexdashboard components).
If I try to run my application ( from batch file using rmarkdown::run or directly from Rstudio, it doesn't really matter) without changing the Rmd file first (just with a space more), the application stars but the chunks are not run.
Basically only the static page is shown and I see that the shiny server (my pc in this case) is in "listen" status.
At this point whatever interaction I do with buttons dropdown list has no effect on the application.
It seems that the chunks are not run if the Rmd file is up to date. There is a way to force the execution? I don't understand what I'm doing wrong.
If I change with a fake modification the rmd and I save it, then all the chunks are executed and the app run perfectly....
I run my app using the following code via batch file:
"D:\Data\v101285\Programs\R\R-3.5.2\bin\i386\R.exe" -e "rmarkdown::run('D:/Data/v101285/Marco/09_R_Projects/02_InteractiveRiskViewer/InteractiveRiskViewer.Rmd', shiny_args = list(launch.browser = TRUE))"
thanks a lot for the support
Edit:
For avoiding cache issues,as suggested in the comments, I included cache=FALSE in every chuck but still the issue persists. I noticed that Rmarkdown creates for every run a temp folder under "C:\Users.....\AppData\Local\Temp....\rmarkdown\". If I delete all the files than the chunks are run and the app works. There is a way to avoid this temp files?
I had a similar problem and i've found a solution:
https://github.com/rstudio/flexdashboard/issues/108
I just had to ensure that runtime: shiny is on its own line (not indented in the yaml header).
title: "Dynamic UI Test"
runtime: shiny
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill

Code / Process for running rmarkdown in base R

All my codes developed in base R and I don't want to use RStudio, however I want to use rmarkdown feature in base R which is available in Rstudio.
I have downloaded rmarkdown package in base r, but not able to derive a code to publish my work
All the output of my codes written in R should be view able through web browser.
First make sure you're using .Rmd as your file extension. If not, rename it to a .Rmd extension. Make sure you have Pandoc installed on your OS.
Next, add the following to the top of the file:
---
title: "Your notebook title"
output: html_document
---
output: could take any value. You can pass in the value of ioslides_presentation for example if you want but it looks like html_document fits the criteria of what you want pretty well.
Once you have that, write your code in any editor (or the R console if you prefer). Use the code chunks and markdown text formatting as you normally would:
```{r}
plot(1:10)
```
In my base R Console, this is how mynotebook.Rmd looks like:
Finally, use the render() function from rmarkdown. You can either attach it and run render():
library(rmarkdown)
render("mynotebook.Rmd")
Or, run rmarkdown::render("mynotebook.Rmd").
Notice that the use of RStudio is not required at all since Pandoc is the document converter performing this task. For the so inclined, this is what its documentation has to say:
When you run render, R Markdown feeds the .Rmd file to knitr,
which executes all of the code chunks and creates a new markdown (.md)
document which includes the code and it's output.
The markdown file generated by knitr is then processed by pandoc
which is responsible for creating the finished format.
This may sound complicated, but R Markdown makes it extremely simple
by encapsulating all of the above processing into a single render
function.

render SQL in Rmarkdown notebook, not just when knit

If I have an R block in an Rmarkdown notebook, the code is visible in the rendered nb.html file. However, if I have a SQL block, I can't find a way to make the code visible in the rendered file.
However, if I generate an html_document (standard knitr) instead of an html_notebook, the rendered HTML does include the SQL code (and output).
Is there a way to get the notebook output to do something closer to what the knit output does?
I've also encountered this recently, Harlan, and began by asking if there's a way to get notebook output more like knit output.
I then wondered if there was a way to get knit output more like notebook output and realised that there was.
After asking the folks at RStudio, I learnt that you can add the following line to the YAML options in order to generate a html_document that, when rendered, enables the RMD to be downloaded. Specifically, use:
output:
html_document:
code_download: true
I now use that in all of my code and it works well. I hope it helps you, too.

Different versions of the rMarkdown package compile a .Rmd differently

Edit
Thanks to some SO (i.e., #tmpname12345) users, I've come to the conclusion that my problem (described below) is likely caused by the differences between v0.2.64 and v0.3.11 of rmarkdown. The question now becomes:
Is there a way I can prevent rmarkdown version 0.3.11 and knitr from adding a line after the title of a .pdf file?
Original Question
I've come across a curious difference between compiling a .pdf document with the same yaml header block on two different computers with Rstudio and knitr. The difference is that on one computer, an additional line is inserted after the title while on the other, the line is not inserted (the preferred behavior). I would like to prevent the line from being inserted regardless of where the document is compiled.
I am using 32-bit R 3.1.2 on both computers. The yaml block is identical between both computers.
Here is the .Rmd file:
---
title: Header Test
output: pdf_document
---
My#gmail.com\hfill \hfill Address
Phone number\hfill \hfill Town, State, ZIP
Evidence of no additional line after the title, generated from my laptop with rmarkdown version 0.2.64:
Evidence of the additional line after the title, generated from my desktop with rmarkdown version 0.3.11:
Initially, I thought it may have been a function of the knitr package version, so I upgraded the package in the second image from 1.7 to the newest available version on CRAN, 1.9, but the extra line still remains.
I have also considered that this is an artifact of the Rstudio version on my laptop but if it is, I don't want to upgrade as the first image is the preferred.
I routinely edit .Rmd files in my Google Drive folder from both a desktop computer and my laptop, accessing the same file. Unfortunately, they compile differently. I prefer that there is no line added after the title. At this point, I don't want to change anything on my laptop, fearing that compilation will start to include the extra line.
Is there some way I can force knitr to not add the additional line?
One way is to create your own latex template that formats the header like you want. You can use the default template as a starting point here. Then save the file as .tex in the same directory as your Rmd file and add this to the yaml header:
output:
pdf_document:
template: mytemplate.tex

Rstudio knit to PDF

The new version of Rstudio (0.98.932) has many new options including knit to PDF. An article describing the new version has a comment from Dave that says:
...after installing rstudio 0.98.932 I don’t get the little dropdown menu
for knit-pdf or word when editing a .Rmd file.
I'm having the same issue. A helpful response was posted:
It might be that either:
a) You are not running R 3.0 (which is required for RMarkdown v2); or
b) You have a custom markdown renderer defined (markdownToHTML
option). You can check for this by executing:
getOption(“rstudio.markdownToHTML”)
That solved Dave's problem (b), but when I run that command I get NULL
> getOption("rstudio.markdownToHTML")
NULL
Which I assume means I don't have a custom markdown renderer defined. (Previously I did in a cusomized .Rprofile, but I removed that.) My R version is 3.1.0.
Am I misunderstanding the getOption command? Could something else be tripping up my Rstudio?
I have just installed the new version of RStudio (0.98.932), which prompted me to upgrade a couple of packages (I can't remember which, although I see I have knitr 1.6, markdown 0.7 and rmarkdown 0.2.46). At first I had the same problem; there was only a single 'knit' option on the tool bar. I managed to get the ability to knit to .pdf by adding the following to the head of my .Rmd file.
---
title: "Sample Document"
output: pdf_document
---
Having done that, I now find I do have a drop down menu with options to knit to HTML, PDF and word. There's also a little gear icon that provides access to the R Markdown document options that wasn't there before. I have no idea what the problem was but it seems OK now!
Adding on #nicholas response
This is also why I create new .Rmd documents through the RStudio gui
File > New File > R markdown.
This way the YAML header is populated correctly.

Resources