2017-01-17 1 views
0

J'essaie d'exécuter un script R comme une application R Shiny. À partir de l'interface utilisateur, l'utilisateur télécharge un fichier .csv et saisit 4 variables numériques. Ces variables doivent être passées à travers la fonction et générer une table final_table qui devrait être affichée en sortie dans l'application Shiny. Actuellement, les variables sont passées à travers la fonction mais ne résultent pas dans la table finale. Je suis nouveau avec RShiny, apprécie votre aide pour faire ce travail. My_function.R est le fichier de script qui contient la fonction my_function(). Ceci est en fait un script R de 500 lignes compressé en une fonction pour une facilité d'utilisation.Comment exécuter un long script R en tant que fonction dans RShiny et afficher la solution dans l'interface utilisateur?

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

Essayez 'source ("my_function.R", locale = TRUE)' 'ou source ("Votre fonction location.r", locale = TRUE)' –

Répondre

1

Il semble que vos paires sortie de rendu sont incompatibles. Si vous souhaitez utiliser une table régulière, vous devriez avoir:

# ui 
tableOutput('contents2') 

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

Si vous souhaitez utiliser un datatable, vous devriez avoir:

# ui 
DT::dataTableOutput('contents2') 

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

Si vous voulez faire cela, assurez-vous » ve a installé le paquet DT.


Si cela se révèle ne pas être le seul problème, notamment la définition de la fonction dans le fichier server.R (après avoir chargé les bibliothèques appropriées). Si cela le corrige, c'est parce que vous n'avez pas trouvé le fichier correctement (peut-être que votre chemin n'est pas correct ou quelque chose comme ça). Si cela ne fonctionne toujours pas, le problème est dans votre fonction elle-même.

En outre, pourquoi ne transmettez-vous pas les entrées directement à my_function? Vous devriez également éviter d'utiliser un observateur dans ce cas. Au lieu de cela, vous pouvez utiliser this pattern:

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

Merci pour votre aide! Cela a fonctionné. J'étais en retard pour mettre à jour le résultat ici –