2015-06-28 89 views
0

我有困難把一些代碼放到一個單獨的文件中。在哪裏把代碼工作在輸入文件(Shiny,R)

下面的代碼工作:

ui.R

library(shiny) 

shinyUI(fluidPage(
    titlePanel("Uploading Files"), 

    sidebarLayout(

     sidebarPanel(

      fileInput('file1', 'Choose CSV File', 
         accept=c('text/csv', 
           'text/comma-separated-values,text/plain', 
           '.csv')), 

      tags$hr() 

     ), 
     mainPanel(
      tableOutput('contents') 
     ) 
    ) 
)) 

server.R

library(shiny) 
library(dplyr) 

shinyServer(function(input, output) { 

    getData <- reactive({ 
     inFile <- input$file1 
     if (is.null(inFile)) return(NULL) 
     data = read.csv(inFile$datapath) 
     ### CleanData 
     data = data %>% 
      mutate_each(funs(toupper)) %>%  
      mutate_each(funs(gsub("[[:punct:]]", " ", .))) %>% 
      mutate_each(funs(str_trim)) %>% 
      mutate_each(funs(rm_white)) %>% 
      sample_frac(1) 

    }) 

    output$contents = renderTable({ 
     getData() 

    }) 

}) 

但是如果我把一些代碼放到一個單獨的文件,這不是」工作。

ui.R不會改變

server.R

library(shiny) 
library(dplyr) 

shinyServer(function(input, output) { 

    getData <- reactive({ 
     inFile <- input$file1 
     if (is.null(inFile)) return(NULL) 
     data = read.csv(inFile$datapath) 
     ### CleanData 
     source('CleanData.R') 

    }) 

    output$contents = renderTable({ 
     getData() 

    }) 

}) 

CleanData.R(在筆記本電腦上的同一目錄)

data = data %>% 
    mutate_each(funs(toupper)) %>%  
    mutate_each(funs(gsub("[[:punct:]]", " ", .))) %>% 
    mutate_each(funs(str_trim)) %>% 
    mutate_each(funs(rm_white)) %>% 
    sample_frac(1) 

它不工作,給錯誤

Error in UseMethod("tbl_vars") : 
    no applicable method for 'tbl_vars' applied to an object of class "function" 

有人知道如何解決這個問題?非常感謝

+0

嗨,複合問題通常氣餒。將你的問題分解成單個問題可能是有意義的。 – pete23

+0

謝謝@ pete23我會編輯它。 –

+0

'CleanData.R'中是否有函數?嘗試在'reactiveServer(函數(輸入,輸出))'行後面調用'source('CleanData.R')''。然後,在你的'getData()'中調用CleanData中的函數名稱 – tospig

回答

2

你得到這個錯誤,因爲當你source的CleanData.R,它是在data沒有被你定義的全球環境評估,因此它指的是功能data。您可以添加local=TRUEsource電話有它的調用環境評估,

source('CleanData.R', local=TRUE) 
+0

它解決了這個問題。非常感謝你@Legalizelt –