2017-01-17 1 views
0

Ich versuche, ein R-Skript als eine R Shiny App auszuführen. Vom Benutzer wird der Benutzer eine CSV-Datei hochladen und 4 numerische Variablen eingeben. Diese Variablen sollten durch die Funktion geschickt werden und es wird eine final_table generiert, die als Ausgabe in der Shiny App angezeigt werden soll. Derzeit werden die Variablen durch die Funktion geleitet, aber nicht in der finalen Tabelle. Ich bin neu mit RShiny, schätze deine Hilfe bei der Arbeit.Wie führe ich ein langes R-Skript als Funktion in RShiny aus und zeige die Lösung im ui an?

my_function.R ist die Skriptdatei, die die Funktion my_function() enthält. Dies ist tatsächlich ein R-Skript mit 500 Zeilen, das zur Erleichterung der Verwendung in eine Funktion komprimiert ist.

my_function <- function(tbl_load, ts_freq, ts_start_yr, ts_start_month, seasonal_cat) { 
    .......... 
    return(collect_ALL_final_fair) 
} 

ui.R

library(shiny) 
fluidPage(
titlePanel("Elasticity Tool"), 
sidebarLayout(
sidebarPanel(
    fileInput('file1', 'Choose datatable csv file', accept=c('.csv')), 

    numericInput("ts_freq", "Time series frequency:", 52, min = 1, max = 100), 
    numericInput("ts_start_yr", "Starting year:", 2013, min = 1990, max = 2030), 
    numericInput("ts_start_month", "Starting month:", 3, min = 1, max = 12), 
    numericInput("seasonal_cat", "Seasonal Category", 0, min = 0, max = 1), 
    br(), 

    actionButton("goButton", label = "Run tool"), 
    br()  
), 

mainPanel(
    tabsetPanel(type = 'tabs', 
       tabPanel("Output", tableOutput('contents2')) 
    ) 
) 
) 
) 

server.R

library(shiny) 
library(datasets) 
source("my_function.R") 
#packages 
library("glmnet") 
library(Matrix) 
library(dplyr) 
library(forecast) 
library(zoo) 
library(stats) 
library(car) 
options(scipen = 999) 

shinyServer(function(input, output) { 

observeEvent(input$goButton, { 
    tbl_load <- input$file1 
    ts_freq <- input$ts_freq 
    ts_start_yr <- input$ts_start_yr 
    ts_start_month <- input$ts_start_month 
    seasonal_cat <- input$seasonal_cat 
    output$contents2 <- renderDataTable({ 
    my_function(tbl_load, ts_freq, ts_start_yr, ts_start_month, seasonal_cat) 
    }) 
    }) 
    }) 
+0

Try 'Quelle ("my_function.R" local = TRUE)' oder 'Quelle ("Ihre Funktion location.r" local = TRUE)' –

Antwort

1

Es scheint, wie die Ausgabe-Render-Paare sind nicht korrekt. Wenn Sie eine regelmäßige Tabelle verwenden möchten, sollten Sie haben:

# ui 
tableOutput('contents2') 

# server 
output$contents2 <- renderTable({}) 

Wenn Sie eine Datentabelle verwenden möchten, sollten Sie haben:

# ui 
DT::dataTableOutput('contents2') 

# server 
output$contents2 <- DT::renderDataTable({}) 

Wenn Sie dies tun wollen, stellen Sie sicher, dass Sie‘ Das Paket DT installiert haben.


Wenn dies erweist sich nicht das einzige Problem sein, sind die Funktionsdefinition in der server.R Datei (nachdem Sie die entsprechenden Bibliotheken laden). Wenn das Problem dadurch behoben wird, liegt es daran, dass Sie die Datei nicht korrekt erstellt haben (vielleicht ist Ihr Pfad nicht richtig oder so ähnlich). Wenn es immer noch nicht funktioniert, liegt das Problem in Ihrer Funktion selbst.

Auch, warum übergeben Sie die Eingänge nicht direkt an my_function? Sie sollten auch vermeiden, in diesem Fall einen Beobachter zu verwenden. Stattdessen können Sie this pattern verwenden:

my_table <- eventReactive(input$goButton, { 
    my_function(input$file1, input$ts_freq, input$ts_start_yr, 
       input$ts_start_month, input$seasonal_cat) 
}) 

output$contents2 <- renderTable({ 
    my_table() 
}) 
+0

Vielen Dank für Ihre Hilfe! Das hat funktioniert. Ich war zu spät, um das Ergebnis hier zu aktualisieren –

Verwandte Themen