【问题标题】:Warning: Error in =: object of type 'closure' is not subsettable警告:= 中的错误:“闭包”类型的对象不是子集
【发布时间】:2018-02-08 15:19:01
【问题描述】:

在将新列添加到反应式之前,我已经尝试了所有方法来定义新列,但它仍然给我一个错误。在我进入闪亮格式之前它工作得很好

#library(shiny)
ui <- fluidPage( "PROJECT REKT ( CDI TOOL)" , selectInput( inputId ="State" , label = "Choose your client's state",  c( "AK","AL","AZ",
    "AR", "CA", "CO", "CT", "DE", "FL", "GA",
    "HI", "ID", "IL", "IN", "IA", "KS", "KY",
    "LA", "ME", "MD", "MA", "MI", "MN", "MS",
    "MO", "MT", "NE", "NV", "NH", "NJ", "NM",
    "NY", 'NC', 'ND', 'OH', 'OK', 'OR', "PA",
    "RI", "SC", "SD", "TN", "TX", "UT", "VT",
    "VA", "WA", "WV", "WI", "WY"), multiple = FALSE, selectize=TRUE , width = NULL , size = NULL)
)

server <- function(input, output) {
   data2 = renderTable(National_data[National_data$state == input$State,])
   #data2$captureRate = NULL

   # Summarize the data by each acuity group ( like aa pivot table), uset SetNames to rename columns

   #data3 = cast(data2 , num_is_wo + num_is_cc + num_is_mcc ~ acuity_group, mean)
   data4 = reactive(
       setNames (aggregate(list(data2()$num_is_cc , data2()$num_is_mcc, data2()$num_is_wo), by=list(data2()$acuity_group), FUN=sum, na.rm=TRUE) , c ("acuity_group","cc","mcc", "wo"))
   )

   # Find the capture rate for each row element
   data4$captureRate = NULL
   data4$captureRate = reactive(
     (data4()$cc + data4()$mcc) / (data4()$wo + data4()$cc + data4()$mcc)
   )

   State_BM_CaptureRate = reactive (
     mean(data4()$captureRate, na.rm = TRUE)
   )

   Output$bencmark = State_BM_CaptureRate
 }

shinyApp(ui = ui, server = server)

这会导致

Listening on http://127.0.0.1:7136
Warning: Error in =: object of type 'closure' is not subsettable
Stack trace (innermost first):
    45: server [#16]
     4: <Anonymous>
     3: do.call
     2: print.shiny.appobj
     1: <Promise>
Error in data4$captureRate = NULL : 
  object of type 'closure' is not subsettable

【问题讨论】:

  • 欢迎来到 SO。请访问stackoverflow.com/help 以更好地提出您的问题,以便其他人可以提供适当的帮助。在您上面的示例中,通过查看您收到的错误消息,您必须了解reactive 变量作为function 访问。所以,试试output$bencmark = State_BM_CaptureRate()
  • 您也可以参考stackoverflow.com/q/40623749/8382207 以获取有关此错误的更多信息。

标签: r shiny


【解决方案1】:

很难假设没有任何数据样本,但乍一看,我认为问题出在这部分:

  data4$captureRate = reactive(
         (data4()$cc + data4()$mcc) / (data4()$wo + data4()$cc + data4()$mcc)
       )

此时您的data4 是一个反应对象!因此你不能使用data4$captureRate!如何解决:

data4 <- reactive({
  data <- setNames (aggregate(list(data2()$num_is_cc,data2()$num_is_mcc, data2()$num_is_wo), by=list(data2()$acuity_group), FUN=sum, na.rm=TRUE) , c ("acuity_group","cc","mcc", "wo"))
  data$captureRate <- (data$cc + data$mcc) / (data$wo + data$cc + data$mcc)
  data})

【讨论】:

  • 嗨,马尔,感谢您的回答。我有一个后续问题。您编写的代码不会向数据集中添加另一列。如果我想向反应对象添加一个新列怎么办。 data4 只有 4 列,我想计算 将第五列添加到恰好是反应性的数据集
  • 您说的是名为:captureRate 还是其他列?
猜你喜欢
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 2019-10-18
  • 1970-01-01
  • 2021-09-09
相关资源
最近更新 更多