忽略R中的空文本输入

忽略R中的空文本输入,r,shiny,R,Shiny,我是个新手。在下面的应用程序中,如果只填写了两个文本输入框中的一个,我希望能够呈现一个数据表。如果两个框都填好,应用程序工作正常。但是,如果只填写了一个变量,我希望数据表只呈现一个变量,例如,只输入X变量名称,并且表中只显示X变量数据 library(shiny) library(dplyr) library(DT) data("mtcars") ui <- fluidPage( titlePanel("Example 01"), sidebarLayout( sid

我是个新手。在下面的应用程序中,如果只填写了两个文本输入框中的一个,我希望能够呈现一个数据表。如果两个框都填好,应用程序工作正常。但是,如果只填写了一个变量,我希望数据表只呈现一个变量,例如,只输入X变量名称,并且表中只显示X变量数据

library(shiny)
library(dplyr)
library(DT)
data("mtcars")

ui <- fluidPage(
  titlePanel("Example 01"),

  sidebarLayout(

    sidebarPanel(

      textInput("x", "X Variable"),
      textInput("y", "Y Variable")
    ),

    mainPanel(

      dataTableOutput(outputId = "table")

    )
  )
)

server <- function(input, output) {

  tabledata <- reactive({
    x <- mtcars %>% select(input$x) * 2
    y <- mtcars %>% select(input$y) * 3

    if (is.null(x) == TRUE){y}
    if (is.null(y) == TRUE){x}
    else {cbind(x,y)}

  })

  output$table <- renderDataTable(tabledata())

}

shinyApp(ui = ui, server = server)
为了测试,我输入了mpg作为X变量,cyl作为Y变量。如果你想知道为什么我使用textInput而不是selectInput,那是因为我使用它的项目有100000多个音乐艺术家的搜索选项


提前谢谢

它不起作用,因为如果其中一个输入为空,则它实际上不是空的,而是一个字符0,或者,如果您愿意的话。因此,R尝试选择一个命名的列,但失败了

然后,必须排除要显示的列列表中的空字符串

我简化了您的代码,并添加了一个触发器按钮来显示表格。这样,您可以等待键入C-Y-L来显示数据。否则,代码将尝试在每个键入的字符处对数据帧进行子集

有光泽的图书馆 图书馆弹琴 图书馆 数据车
ui不必像@Jrm_FRL指出的那样,通过输入$x==检查x是否为空,您可以避开这一点,只需检查x是否为实际列的名称:

x <- if(input$x %in% colnames(mtcars))  mtcars %>% select(input$x) * 2

对y做同样的处理,剩下的代码就应该按原样工作。

我感谢您简化代码,但不幸的是,在我的项目中,输入不能很容易地组合成向量;首先修改它们。为了反映这个示例,我回到了原始代码,将mtcars%>%selectinput$x更改为mtcars%>%selectinput$x*2,并将y乘以3。为没有在最初的帖子中明确表示歉意。如果修改了输入,并且必须将x和y保留为存储值,您会怎么做?好的,然后我对我的答案进行了编辑,以坚持您的语法。然而,哲学思想仍然是一样的。出于商品原因,我保留了触发按钮,但你当然可以摆脱它!