首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在正则R函数中找不到Dataset (a reactiveValue)

在正则R函数中找不到Dataset (a reactiveValue)
EN

Stack Overflow用户
提问于 2017-05-30 20:40:57
回答 1查看 59关注 0票数 0

我有一个数据集(称为mydata$data),希望随时保持更新。首先,将此数据集读入为“rawdata”。然后由几个正则R函数对其进行更新。

下面是我的密码。当我运行这个应用程序时,我总是会发现这个错误。

代码语言:javascript
复制
Warning: Error in <-: object 'mydata' not found
Stack trace (innermost first):
    106: PrepareData [./functions-sample.R#2]

有人能帮忙吗?我应该如何定义该数据集?如何使用常规的R函数更新它?

Rawdata:

代码语言:javascript
复制
colA <- c('A','B','C','D','E')
colB <- c(1,2,3,4,5)
rawdata <- as.data.frame(cbind(colA,colB))
View(rawdata)

ui.R:

代码语言:javascript
复制
fluidPage(
  sidebarPanel(
    actionButton("runButton", strong("Run!"))
  ),
  mainPanel(
    tabsetPanel(id = "allResults",
              tabPanel(value='inputVars',title='Variable', DT::dataTableOutput('inputVars')),
              tabPanel(value='result',title='Result', DT::dataTableOutput('result')),
              tabPanel(value='temp',title="TEMP", verbatimTextOutput("temp"))
    )
  )
)

服务器。R:

代码语言:javascript
复制
source("./functions-sample.R")

function(input, output, session) {

  # Activate tab 'Result' when users click 'Run'
  observeEvent(input$runButton, {
    updateTabsetPanel(session, "allResults", 'result')
  })

  mydata <- reactiveValues()

  ### RESULT TAB ###

  # mydata$data is the active dataset we want to keep updating
  result <- eventReactive (input$runButton, {
    mydata$data <- rawdata
    PrepareData(mydata$data)
    head(mydata$data,5)
  })

  ### RENDERING FUNCTIONS ###

  # Default SummaryTable
  output$inputVars <- DT::renderDataTable({
      DT::datatable(rawdata, options = list(paging = FALSE, searching = FALSE))
  })

  # Display results
  output$result <- DT::renderDataTable({
    DT::datatable(result(), options = list(paging = FALSE, searching = FALSE))
  })

  output$temp <- renderPrint({
    print(head(mydata$data))
  })
}

功能-样本。R:

代码语言:javascript
复制
PrepareData<-function(datax) {
  mydata$data <- RankData(datax)
  CodeMissingData(mydata$data)
}

RankData<-function(datax) {
  return(datax[order(datax[,1],datax[,2]),])
}

CodeMissingData<-function(datax) {
  for (v in 4:ncol(datax)) {
    if (!("*NA*" %in% levels(datax[,v]))) {levels(datax[,v])<<-c(levels(datax[,v]),"*NA*")}
  }
  datax[,-(1:3)][is.na(datax[,-(1:3)]) | datax[,-(1:3)]=="NA"]<<-"*NA*"
  mydata$data <- datax
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-30 20:48:53

尝试从函数中返回数据,而不是修改它:

代码语言:javascript
复制
CodeMissingData<-function(datax) {
  for (v in 4:ncol(datax)) {
    if (!("*NA*" %in% levels(datax[,v]))) {levels(datax[,v])<-c(levels(datax[,v]),"*NA*")}
  }
  datax[,-(1:3)][is.na(datax[,-(1:3)]) | datax[,-(1:3)]=="NA"]<-"*NA*"
  return(datax)
}

PrepareData<-function(datax) {
  CodeMissingData(RankData(datax))
}

然后在服务器上。

代码语言:javascript
复制
 result <- eventReactive (input$runButton, {
    mydata$data <- PrepareData(rawdata)
    head(mydata$data,5)
  })
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44271546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档