3

我正在尝试在 Shiny 的数据框中计算一个新变量,该变量是有条件地根据另一个变量计算的。

这是我正在尝试做的一个小例子:

mydata <- data.frame(cbind(x = 1, y = 1:10))
value <- 10 #from user input
mydata$z[mydata$y >= 5] <- mydata$y[mydata$y >= 5] + value
mydata$z[mydata$y < 5] <- mydata$y[mydata$y < 5] - value

这是我的 ui.R 文件:

#Library
library("shiny")

# Define UI for miles per gallon application
shinyUI(pageWithSidebar(

  # Application title
  headerPanel("Test"),

  sidebarPanel(
    numericInput("value", "Enter Value:", 10)
  ),

  mainPanel(
    tableOutput("table")
  )
)
)

这是我的 server.R 文件:

#Libraries
library(shiny)

#Load Data
mydata <- data.frame(cbind(x = 1, y = 1:10))

# Define server logic
shinyServer(function(input, output) {

  mydata$z[mydata$y >= 5] <- reactive({
    mydata$y + input$value
  })

  mydata$z[mydata$y < 5] <- reactive({
    mydata$y - input$value
  })

  output$table <- renderTable({
    mydata
  })

})

使用此 Shiny 代码,我收到以下错误:

mydata$z[mydata$y >= 5] <- reactive({ : 向量分配中的类型/长度无效 (closure/0) 中的错误

我尝试了不同的子集和分配方式,但我被卡住了。非常感谢您的帮助!

4

1 回答 1

7

我不确定您是否清楚reactive()正在做什么...我建议您阅读更多shiny文档,尤其是查看示例-“ 03_reactivity”可能是一个不错的选择。

无论如何,这就是您的代码如何适应您想要的。这不是最好的方法,但希望它可以帮助您了解目前存在问题的地方。

我只更改了server.R文件,并没有更改任何有关您如何构建新变量的代码。构造新变量的代码位于reactive函数内部 - 然后您需要调用该函数来实际制作表格。

#Libraries
library(shiny)

#Load Data
mydata <- data.frame(cbind(x = 1, y = 1:10))

# Define server logic
shinyServer(function(input, output) {

  newdata <- reactive({
    mydata$z[mydata$y >= 5] <- mydata$y[mydata$y >= 5] + input$value
    mydata$z[mydata$y < 5] <- mydata$y[mydata$y < 5] - input$value
    return(mydata)
  })

  output$table <- renderTable({
   newdata()
  })

})
于 2013-06-12T03:34:44.133 回答