2017-01-17 4 views
0

R 반짝이 응용 프로그램으로 R 스크립트를 실행하려고합니다. ui에서 사용자는 .csv 파일을 업로드하고 4 개의 숫자 변수를 입력합니다. 이러한 변수는 함수를 통해 전달되어야하며 final_table을 생성합니다.이 final_table은 Shiny App에 출력으로 표시되어야합니다. 현재 변수는 함수를 통해 전달되지만 최종 테이블은 생성되지 않습니다. 나는 RShiny와 새로운,이 작품을 만드는 데 도움을 주셔서 감사합니다.RShiny에서 긴 R 스크립트를 함수로 실행하고 UI에 솔루션을 표시하는 방법은 무엇입니까?

my_function.R은 my_function() 함수가 포함 된 스크립트 파일입니다. 사실 이것은 사용하기 쉬운 기능으로 압축 된 500 줄 R 스크립트입니다. 당신의 출력 렌더링 쌍의 일치처럼

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

시도'소스 ("my_function.R"지역 = TRUE)'또는'소스 ("당신의 기능 location.r"지역 = TRUE) 당신의 도움을 위해' –

답변

1

보인다. 당신은 일반 테이블을 사용하려면이 있어야합니다

# ui 
tableOutput('contents2') 

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

당신은 데이터 테이블을 사용하려면, 당신은해야한다 :이 작업을 수행하려면

# ui 
DT::dataTableOutput('contents2') 

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

것은, 당신에게 확인 ' DT 패키지가 설치되었습니다. 이 유일한 문제가되지 않을 밝혀 경우 (적절한 라이브러리를로드 한 후)


server.R 파일의 함수 정의를 포함한다. 이 문제가 해결되면 파일을 올바르게 소싱하지 않았기 때문입니다 (어쩌면 경로가 올바르지 않거나 그런 것일 수도 있습니다). 여전히 작동하지 않는다면 문제는 함수 자체에 있습니다.

또한 입력을 my_function으로 직접 전달하지 않는 이유는 무엇입니까? 이 경우 옵저버 사용을 피해야합니다. 대신 당신은 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

감사합니다! 이것은 효과가 있었다. 나는 결과를 여기에서 최신으로하기 위해 늦었다 –