首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:如何通过服务器函数中的renderUI ()引用uiOutput中的反应性元素?

R:如何通过服务器函数中的renderUI ()引用uiOutput中的反应性元素?
EN

Stack Overflow用户
提问于 2017-09-28 23:21:30
回答 2查看 2.3K关注 0票数 2

我试图让一个UI元素与另一个UI元素反应,然后测试第一个元素是否等于一个特定的值。我似乎能够打印出反应性元素的值,但我不能在if语句中使用它来检查它的值。密码在下面。我已经把第23行的麻烦部分删掉了。它与注释掉的行一起运行,并验证reactive $comment 1确实有一个字符值介于1-5之间,如预期的那样,但是当我取消注释行以检查该整数值是否为1时,它会告诉我输入$parres1为null。确切的错误是:

代码语言:javascript
复制
Warning:
Error in if: argument is of length zero
Stack trace (innermost first):
59: observerFunc [#16]
 4: <Anonymous>
 3: do.call
 2: print.shiny.appobj
 1: <Promise>

为什么它会告诉我输入$pares1是空的,当它作为char输出的时候?还是我误读了错误?谢谢你的帮忙!

代码语言:javascript
复制
suppressWarnings(library(shiny))
suppressWarnings(library(shinyFiles))
    ui <- function(request) {
    fluidPage(
        uiOutput("param1"),
        uiOutput("param2"),
        fluidRow(column(12, verbatimTextOutput("value", placeholder = T)))
    )
}

server <- function(input, output, session) {
    state = reactiveValues()

    observe({
          state$choice <- setNames(as.list(c(1, 2, 3, 4, 5)), c("First", "Second",
            "Third", "Fourth", "Fifth"))
    })
    output$param1 <- renderUI({
        selectInput("paramRes1", "Select Param 1", state$choice, selected = 1)
    })
    output$param2 <- renderUI({
        textInput("paramNm", "Param", value = input$paramRes1, width = '150px')
    })

    observe({
      #  if (input$paramRes1 %in% 1) {
            state$val <- input$paramRes1
      #  } else {
      #      state$val <- 0
      #  }

    })

    output$value <- renderText({ str(state$val) })
}
shinyApp(ui = ui, server = server)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-29 04:20:09

下面是你的应用程序的一个(稍微)简化的版本,我在注释中建议修复这个版本

代码语言:javascript
复制
library(shiny)

ui <- fluidPage(
  uiOutput("param1"),
  uiOutput("param2"),
  fluidRow(column(12, verbatimTextOutput("value", placeholder = T)))
)

server <- function(input, output, session) {
  state = reactiveValues(choice = list(
    first = 1, second = 2, third = 3, fourth = 4, fifth = 5
  ))
  output$param1 <- renderUI({
    selectInput("paramRes1", "Select Param 1", state$choice, selected = 1)
  })
  output$param2 <- renderUI({
    textInput("paramNm", "Param", value = input$paramRes1, width = '150px')
  })
  observeEvent(input$paramRes1,{
    if (input$paramRes1 %in% 1)
      state$val <- "It's 1"
    else
      state$val <- "It's not 1"
  })
  output$value <- renderText({ state$val })
}

shinyApp(ui = ui, server = server)
票数 1
EN

Stack Overflow用户

发布于 2017-09-29 04:15:26

下面的内容会有效吗?我只是在这里更改服务器部分。这种差异在######中突出显示。

代码语言:javascript
复制
server <- function(input, output, session) {
  state = reactiveValues()

  observe({
    state$choice <- setNames(as.list(c(1, 2, 3, 4, 5)), c("First", "Second",
                                                      "Third", "Fourth", "Fifth"))
   })
  output$param1 <- renderUI({
    selectInput("paramRes1", "Select Param 1", state$choice, selected = 1)
  })
  output$param2 <- renderUI({
    textInput("paramNm", "Param", value = input$paramRes1, width = '150px')
  })

#####
  observeEvent(input$paramRes1, {
     if (input$paramRes1 == 1) {
     state$val <- input$paramRes1
      } else {
     state$val <- 0
      }
  })
###### 

   output$value <- renderText({ str(state$val) })
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46479646

复制
相关文章

相似问题

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