将响应对象的值添加到现有数据框作为列

时间:2016-08-01 22:19:32

标签: r shiny

我很擅长使用Shiny,并且在将反应值添加到现有数据框时遇到一些问题。

我有一个名为CalculatedDistance的反应对象,它可以计算闪亮应用上的输入更改时的距离。我试图将此对象中的计算距离添加到数据框中的新列,但收到以下错误消息:

Error in CalculatedDistance[i] : object of type 'closure' is not subsettable

以下代码正常工作,直到我尝试将值添加到新列。

library('shiny') #allows for the shiny app to be used

alldata <- iris

#adds a column of a unique ID for each row
alldata$ID <- 1:nrow(alldata)

# UI

ui<-fluidPage(
titlePanel("Explorer"),
fluidRow(
       wellPanel(
         numericInput(inputId = "UserPetalLength", label="Input Petal Length", value = 0, step = 0.1),
         numericInput(inputId = "UserPetalWidth", label="Input Petal Width", value = 0, step = 0.1)),
         tableOutput('Table')
))

#SERVER
server<-function(input,output,session)
{
 CalculatedDistance<- reactive({
    calculatedDistance <- sqrt((alldata$Petal.Length-input$UserPetalLength)^2 + (alldata$Petal.Width-input$UserPetalWidth)^2)
  })

 alldata$distance<- NA
 nRows <- nrow(alldata)
 for (i in 1:nRows)
 {
   alldata$distance[i]= CalculatedDistance[i]
 }
 output$Table = renderTable(alldata)

}


#Run the Shiny App to Display Webpage
shinyApp(ui=ui, server=server)

1 个答案:

答案 0 :(得分:0)

这对我有用;我在server进行了一些更改以使其正常工作。

  • 在反应环境中包含“添加到数据框”部分
  • 您没有必要使用循环,因为CalculatedDistance会返回一个向量,我们可以轻松地将其添加到数据框
  • {}
  • 中添加了一对output$Table
  • 将数据框转换为数据表
    #server.R


    shinyServer(function(input,output,session)
    {
      CalculatedDistance<- reactive({
        calculatedDistance <- sqrt((alldata$Petal.Length-input$UserPetalLength)^2 + (alldata$Petal.Width-input$UserPetalWidth)^2)
        calculatedDistance
      })

      add_to_df <- reactive({
        alldata$distance<- NA
        nRows <- nrow(alldata)
        alldata$distance <- CalculatedDistance()

        alldata

      })

      output$Table <- renderTable({
        data.table(add_to_df())

      })

    })