【问题标题】:where to put the code working on input file (Shiny, R)将代码用于输入文件的位置(Shiny,R)
【发布时间】:2015-06-28 09:05:17
【问题描述】:

我很难将一些代码放入单独的文件中。

以下代码有效:

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')
        )
    )
))

服务器.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 不变

服务器.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"

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

【问题讨论】:

  • 您好,通常不鼓励复合问题。将您的问题分成单独的问题可能是有意义的。
  • 谢谢@pete23 我会编辑它。
  • CleanData.R里面有函数吗?尝试在reactive 表达式之外调用source('CleanData.R'),就在shinyServer(function(input, output)) 行之后。然后,在您的 getData() 中调用 CleanData 中的函数名称
  • 谢谢@tospig CleanData.R 只有几行代码(不是函数)。我必须把它写成一个函数吗?

标签: r input shiny


【解决方案1】:

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

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

【讨论】:

  • 它解决了这个问题。非常感谢@Legalizelt
猜你喜欢
  • 2018-09-07
  • 2021-05-26
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
  • 2020-03-26
  • 2018-01-31
  • 2019-02-05
  • 1970-01-01
相关资源
最近更新 更多