presentacion - Producir un informe PDF usando knitr(LaTeX) desde la aplicación Shiny
rmarkdown en r (1)
Tal como lo sugerí en mi comentario, debe usar aes_string()
para pasar argumentos de manera ggplot
a ggplot
. El error que está obteniendo es porque ''input'' es un valor de carácter mientras aes()
espera nombres sin comillas. Aquí es cómo debe reemplazar la llamada a aes(mpg, input$variable)
:
myPlot1 <- reactive({
p <- print(ggplot(mpgData, aes_string(''mpg'', input$variable)) +
geom_line())
})
Intento crear una aplicación brillante que te permita descargar un informe en PDF con buen formato, de acuerdo con los subanálisis definidos por el usuario. Encontré esta idea que contiene un ejemplo mínimo, que funciona muy bien. Sin embargo, cuando traté de agregar un diagrama, basado en el ejemplo de "Millas por galón" de la galería Rstudio, encontré algunos errores cuando intenté adaptar el código.
Aquí está mi código server.R
:
library(knitr)
library(datasets)
library(ggplot2)
mpgData <- mtcars
mpgData$am <- factor(mpgData$am, labels = c("Automatic", "Manual"))
shinyServer(function(input, output) {
formulaText <- reactive({
paste("mpg ~", input$variable)
})
# Return the formula text for printing as a caption
output$caption <- renderText({
formulaText()
})
# Generate a plot of the requested variable against mpg and only
# include outliers if requested
output$mpgPlot <- renderPlot({
boxplot(as.formula(formulaText()),
data = mpgData,
outline = input$outliers)
})
myPlot1 <- reactive({
p <- print(ggplot(mpgData, aes(mpg, input$variable)) +
geom_line())
})
myPlot2 <- reactive({
#renderPlot({
p <- print(
boxplot(as.formula(formulaText()),
data = mpgData,
outline = input$outliers)
)
})
output$report = downloadHandler(
filename = ''myreport.pdf'',
content = function(file) {
out = knit2pdf(''input.Rnw'', clean = TRUE)
file.rename(out, file) # move pdf to file for downloading
},
contentType = ''application/pdf''
)
})
y aquí está mi código ui.r
library(shiny)
library(datasets)
shinyUI(fluidPage(
# Application title
titlePanel("Miles Per Gallon"),
# Sidebar with controls to select the variable to plot against mpg
# and to specify whether outliers should be included
sidebarLayout(
sidebarPanel(
textInput(''firstname'', ''First name'', value = ''Adam''),
textInput(''lastname'', ''Last name'', value = ''Smith''),
downloadButton(''report''),
selectInput("variable", "Variable:",
c("Cylinders" = "cyl",
"Transmission" = "am",
"Gears" = "gear")),
checkboxInput("outliers", "Show outliers", FALSE)
),
# Show the caption and plot of the requested variable against mpg
mainPanel(
h3(textOutput("caption")),
plotOutput("mpgPlot")
)
)
))
mientras que el archivo input.Rnw
ve así:
/documentclass{article}
/begin{document}
<<names>>=
input$firstname
input$lastname
@
<<>>=
#output$mpgPlot ## N.B. This threw an error! Cannot call an object like this from shiny
print(myPlot1())
@
<<>>=
print(myPlot2())
@
/end{document}
He estado jugando con esto durante unas horas, y estoy bastante atrapado. La parte de input$names
funciona bien, pero no puedo encontrar la forma de traer un gráfico reactive
. El mensaje de error / advertencia es ''Error: object ''input'' not found''
, así que sé que no está detectando los cambios de entrada $ variable que se pasan desde el script ui.R
Gracias por su ayuda para resolver esto
sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-apple-darwin13.1.0 (64-bit)
locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggplot2_0.9.3.1.99 knitr_1.6 shiny_0.10.0
loaded via a namespace (and not attached):
[1] bitops_1.0-6 caTools_1.17 colorspace_1.2-4 digest_0.6.4 evaluate_0.5.5 formatR_0.10 grid_3.1.0 gtable_0.1.2
[9] highr_0.3 htmltools_0.2.4 httpuv_1.3.0 labeling_0.2 MASS_7.3-33 munsell_0.4.2 plyr_1.8.1 proto_0.3-10
[17] RColorBrewer_1.0-5 Rcpp_0.11.2 reshape2_1.4 RJSONIO_1.2-0.2 scales_0.2.4 stringr_0.6.2 tools_3.1.0 xtable_1.7-3