在哪里放置代码在输入文件上工作(Shiny,R)

where to put the code working on input file (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"

有人知道如何解决这个问题吗?非常感谢

您收到该错误是因为当您 source 和 CleanData.R 时,它是在您未定义 data 的全局环境中评估的,因此它指的是到函数 data。您可以将 local=TRUE 添加到 source 调用以在调用环境中对其进行评估,

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