【问题标题】:ifelse statement in Shiny Applicaion闪亮应用程序中的 if else 语句
【发布时间】:2018-07-30 04:58:33
【问题描述】:

考虑下面的代码,下面的数据只是完整数据集的样本。实际上所有这些数据都是一个data.frames。

#Input data
x = c(70407, 70407, 10977, 10977, 70668, 70450, 70276, 70450, 20820,"L06G1", "L06AP",20820, 70450, 70450, 70450, 70190, 70450)

#Shiny ui.R
selectInput(inputId = "z",label = "PN",choices = unique(x),multiple = TRUE,selected = "")

#if else statement in server.R
y = if(is.null(input$z)) as.vector(unique(x)) else input$z

我担心的是,即使为 z 选择特定值,输出 y 而不是 z,也会显示 unique(x)。

所有数据类型都相同,字符。

dplyr 有没有更好的解决方案?

【问题讨论】:

  • 我了解代码不可重现。该文件太大,无法在此处发布。这里的问题是,当数据框中的内容过于相似(我假设)时,ifelse 似乎不起作用。关于我们如何在 R 中做到这一点的任何 cmets ?就像在 excel 中我们有 vlookup "EXACT" ?
  • 谢谢大家。代码终于奏效了,我使用 as_vector(来自 purrr)而不是 as.vector。看起来与它匹配的准确性。

标签: r shiny dplyr


【解决方案1】:

您的实现应该还有另一个问题。这是基于您的描述的最小工作示例:

library(shiny)

x = c(70407, 70407, 10977, 10977, 70668, 70450, 70276, 70450, 20820, "L06G1", "L06AP", 20820, 70450, 70450, 70450, 70190, 70450)

## if x is a column of the data frame df as you stated:
# x <- df$x[!is.na(df$x)]

ui <- fluidPage(
  selectInput(
    inputId = "z", 
    label = "PN", 
    choices = unique(x),
    selected = NULL,
    multiple = T,
  ),
  verbatimTextOutput("y")
)

server <- function(input, output) {
  output$y <- renderPrint({
    y <- if(is.null(input$z)) as.vector(unique(x)) else input$z
    y
  })
}

shinyApp(ui = ui, server = server)

请注意,如果您提供可重复的问题,您可以充分利用 Stack Overflow 社区:How to make a great R reproducible example?

【讨论】:

  • 感谢您对可重现示例的反馈,我的下一个问题将包括相同的内容。但是,上面写的代码似乎不起作用。
  • 你能再评价一下吗?它没有运行或不符合您的标准?你想达到什么目的?据我了解,如果输入为空,您希望存储所有唯一值,如果存在则存储所选值。
  • 没错!这里的问题是,即使我选择一个值,所有唯一值都存储为输出。
  • 能否请您在控制台中运行我的答案?文本输出显示存储的值,它遵循您想要的行为:所有唯一变量都显示在初始状态,因为没有选择任何内容(即输入为 NULL),并且在您开始选择时仅显示选定的变量。我没有发现任何问题。
  • 有效!但是,当我尝试将其复制到其他应用程序(具有 50K 数据点)时,它似乎不起作用。有什么原因吗?
猜你喜欢
  • 2021-09-21
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 2019-04-09
相关资源
最近更新 更多