R 如果语句不能在系统中工作

R 如果语句不能在系统中工作,r,if-statement,shiny,reactive,R,If Statement,Shiny,Reactive,我正在创建一个闪亮的应用程序,它从两个输入开始创建一个有序列表。该列表用于根据数据库对象的关系对其进行排序 因为我定义了可能的输入,所以我插入了一些if语句,但这不起作用(因此我得到的是整个数据集,而不是我选择的部分) 我正在使用三个主要数据帧: 环境(EnvName、A1、A2、A3列),其思想是我需要完成完整的模式名称,添加环境,并且env前缀根据区域的不同而变化 关系:所有父子关系的列表 -模式:所有模式名称的列表,分为不同的区域,第1部分和第2部分允许构建全名 编辑:我已经更新了代码

我正在创建一个闪亮的应用程序,它从两个输入开始创建一个有序列表。该列表用于根据数据库对象的关系对其进行排序

因为我定义了可能的输入,所以我插入了一些if语句,但这不起作用(因此我得到的是整个数据集,而不是我选择的部分)

我正在使用三个主要数据帧:

  • 环境(EnvName、A1、A2、A3列),其思想是我需要完成完整的模式名称,添加环境,并且env前缀根据区域的不同而变化
  • 关系:所有父子关系的列表 -模式:所有模式名称的列表,分为不同的区域,第1部分和第2部分允许构建全名
编辑:我已经更新了代码。请注意,我曾尝试使用RunOrder作为反应部分的输出,但我在Shining应用程序而不是表格中得到了此错误:

'data' must be 2-dimensional (e.g. data frame or matrix)
代码如下

library(shiny)

library(shinydashboard)
library(dplyr)



ui <- shinyUI(pageWithSidebar(
  headerPanel("Run Order List"),
  sidebarPanel(
    #declare 2 text inputs and submit button
    selectInput("EnvName", "Environment:", c("Env")),
    selectInput("Area", "Area:", c("A1", "A2","A3")),

    actionButton(
      inputId = "submit_loc",
      label = "Submit")

  ),
  mainPanel(
    DT::dataTableOutput("RunOrder")

  )
))

##
server <- shinyServer(function(input, output, session) {


  observeEvent(
    eventExpr = input[["submit_loc"]],
    handlerExpr = {

      input$EnvName
      input$Area

  #Loading the data



      Relationships <- read.csv("myfile", header = TRUE, sep = ";")
      Environments <- read.csv("myfile2", header = TRUE, sep = ";")
      Schemas <- read.csv("myfile3", header = TRUE, sep = ";")

  ##CreatingListofSchemas

  out <- reactive({  
    if (input$Area == "A1")
      {
        Environments <-subset(Environments, EnvName == input$EnvName)
        Relevant_schemas <- subset(Schemas, Area == "A1")
        Relevant_schemas $FullName <- paste(Relevant_schemas $Part1,Environment$A1,Relevant_schemas$Part2, sep="")
      }
    else if(input$Area == "A2"){

               Environments <-subset(Environments, EnvName == input$EnvName)
                            Relevant_schemas <- subset(Schemas, Area == "A2")
                            Relevant_schemas$FullName <- paste(Environment$A2,Relevant_schemas$Part1, sep="")
                            }
    else{

      Environments <-subset(Environments, EnvName == input$EnvName)
      Relevant_schemas <- subset(Schemas, Area == "A3")
      Relevant_schemas $FullName <- paste(Relevant_schemas$Part1,Environment$A3,Csa_schemas$Part2, sep="")}

    return(Relevant_schemas$FullName)
  })

  #Selecting environment

  Relationships <- subset(Relationships, grepl(paste(Relevant_schemas$FullName, collapse = "|"), Relationships$ParentDB))

 Level1Tables <- subset(Relationships, select = c(Parent),  !(Parent %in% c(Child)))

  Level1Tables <- unique(Level1Tables)
  colnames(Level1Tables)<- "tables"
  Level1Tables$Level <- 1

  RunOrder <- Level1Tables

  RemainingTables <- anti_join(AllTables, RunOrder, by = NULL, copy = TRUE)}


    output$RunOrder = DT::renderDataTable({
      RunOrder
    })
    })
})
##
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinydashboard)
图书馆(dplyr)

ui我设法修复了代码,我正在发布这个,以防它对其他人有用。问题出在if语句和被动函数中。我没有使用反应函数,而是将输入分配给一个变量,然后用于执行其他操作

以下更新代码的相关部分

server <- shinyServer(function(input, output, session) {


  observeEvent(
    eventExpr = input[["submit_loc"]],
    handlerExpr = {

      AreaSelect <- input$Area
      EnvSelect <- input$EnvName

    if (AreaSelect  == "A1")
      {
        Environments <-subset(Environments, EnvName == EnvSelect)
        Relevant_schemas <- subset(Schemas, Area == "A1")
        Relevant_schemas $FullName <- paste(Relevant_schemas $Part1,Environments$A1,Relevant_schemas$Part2, sep="")
      }     else if(AreaSelect == "A2"){

               Environments <-subset(Environments, EnvName == EnvSelect)
                            Relevant_schemas <- subset(Schemas, Area == "A2")
                            Relevant_schemas$FullName <- paste(Environments$A2,Relevant_schemas$Part1, sep="")
   }     else {

      Environments <-subset(Environments, EnvName == EnvSelect)
      Relevant_schemas <- subset(Schemas, Area == "A3")
      Relevant_schemas $FullName <- paste(Relevant_schemas$Part1,Environments$A3,Csa_schemas$Part2, sep="")}

    return(Relevant_schemas$FullName)


  #Selecting environment

  Relationships <- subset(Relationships, grepl(paste(Relevant_schemas$FullName, collapse = "|"), Relationships$ParentDB))

server代码的大部分细节与实际问题无关。如果您能在代码中定义一个强调最小值的
RunOrder
,这会很有帮助?(我的意思是在服务器中)。
reactive
输出为
out
@akrun我现在已经在RunOrder上添加了部分并编辑了部分。@John Coleman我已经尝试在代码中添加一个附加部分,以便可以复制。我不想让它变得更简单,因为我不想丢失部分信息。我见过许多类似的答案,但对我来说没有任何效果。@Barbara它不是真正的可复制的,因为它需要设置一个闪亮的服务器,并创建几个指定的文本文件和数据帧。您实际的问题似乎是关于
if
的语义。当然,您可以用易于复制(只需复制粘贴代码)的结构来说明问题,而不是用可能需要数小时才能复制您的情况。
server <- shinyServer(function(input, output, session) {


  observeEvent(
    eventExpr = input[["submit_loc"]],
    handlerExpr = {

      AreaSelect <- input$Area
      EnvSelect <- input$EnvName

    if (AreaSelect  == "A1")
      {
        Environments <-subset(Environments, EnvName == EnvSelect)
        Relevant_schemas <- subset(Schemas, Area == "A1")
        Relevant_schemas $FullName <- paste(Relevant_schemas $Part1,Environments$A1,Relevant_schemas$Part2, sep="")
      }     else if(AreaSelect == "A2"){

               Environments <-subset(Environments, EnvName == EnvSelect)
                            Relevant_schemas <- subset(Schemas, Area == "A2")
                            Relevant_schemas$FullName <- paste(Environments$A2,Relevant_schemas$Part1, sep="")
   }     else {

      Environments <-subset(Environments, EnvName == EnvSelect)
      Relevant_schemas <- subset(Schemas, Area == "A3")
      Relevant_schemas $FullName <- paste(Relevant_schemas$Part1,Environments$A3,Csa_schemas$Part2, sep="")}

    return(Relevant_schemas$FullName)


  #Selecting environment

  Relationships <- subset(Relationships, grepl(paste(Relevant_schemas$FullName, collapse = "|"), Relationships$ParentDB))