web-dev-qa-db-ja.com

条件付き出力シャイニーUI

調査データがあります。 Shinyを使用して、単変量および二変量解析の結果を共同研究者と共有したいと思います。調査には、数値変数と因子変数があります。シャイニーなアプリケーションを見た人は、単変量/二変量の要約に興味を持っている、と変数の型(複数可)に応じて、彼らは私が別の出力を表示する集計するかどうかに応じて。

具体的には、

i)単変量で数値の場合、次を表示します。

  • アイテムの回答率:length() - sum(is.na())
  • hist()
  • summary()

ii)単変量と因数分解の場合、次を表示します。

  • アイテムの回答率
  • barplot()
  • table()
  • prop.table()

iii)2変量および数値*数値の場合、次を表示します。

  • アイテムの回答率
  • 散布図:plot(x,y)
  • summary(x)
  • summary(y)
  • cor(x,y,method="spearman")

iv)2変量およびfactor * factorの場合、次を表示します。

  • アイテムの回答率
  • 棒グラフ...「rChartsnvd3multiBarChart」のようなもの
  • table(x,y)
  • prop.table(x,y)
  • chisq.test(x,y)

v)2変量および(factor * numeric OR numeric * factor)の場合、次を表示します。

  • アイテムの回答率
  • 箱ひげ図
  • 因子変数による数値変数の要約:by(numeric, factor, summary)
  • クラスカルウォリス検定kruskal.test(numeric ~ factor)

現在、5つのステップすべてに必要な出力を個別のアプリケーションとして生成するコードがあります。それらを1つの光沢のあるアプリにまとめたいと思います。ユーザーがmainPanel() UIで行った選択の関数として受け取るさまざまな出力に反応するように、sidebarPanel()ディスプレイを設定する方法に概念的に苦労しています。

具体的には、

  • さまざまな出力を反映するようにmainPanel()UIヘッダーを変更する方法
  • 出力の複数の部分を含めるには、以下の方法を概念的に私のコードを展開する(すなわち、単一部品のコードの作品の下にverbatimTextOutput()が、私は複数の部分を進行する方法がわからない/出力の種類は、私が表示したいです上記の(i-iv)で説明したように、たとえば、テキスト、表、プロット。

以下は、ui.Rファイルのコードです。

library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Shiny Example"),
sidebarPanel(
wellPanel(
selectInput(inputId = "variable1",label = "Select First Variable:", 
choices = c("Binary Variable 1" = "binary1",
"Binary Variable 2" = "binary2", 
"Continuous Variable 1" = "cont1",
"Continuous Variable 2" = "cont2"),
selected = "Binary Variable 1"
)
),

wellPanel(
checkboxInput("bivariate", "Proceed to Bivariate Analysis", FALSE),
conditionalPanel(
condition="input.bivariate==true",
selectInput(inputId = "variable2", 
label = "Select Second Variable:",
choices = c("Binary Variable 1" = "binary1",
"Binary Variable 2" = "binary2", 
"Continuous Variable 1" = "cont1",
"Continuous Variable 2" = "cont2"),
selected = "Binary Variable 2"
)
)
)
),

mainPanel(
h5("Output"),
verbatimTextOutput("out")
)
))

以下は、シミュレートされたデータとserver.Rファイルです。

binary1 <- rbinom(100,1,0.5)
binary2 <- rbinom(100,1,0.5)
cont1   <- rnorm(100)
cont2   <- rnorm(100)

dat <- as.data.frame(cbind(binary1, binary2, cont1, cont2))

dat$binary1 <- as.factor(dat$binary1)
dat$binary2 <- as.factor(dat$binary2)
dat$cont1 <- as.numeric(dat$cont1)
dat$cont2 <- as.numeric(dat$cont2)

library(shiny)
library(rCharts)

shinyServer(function(input, output) {

inputVar1 <- reactive({
parse(text=sub(" ","",paste("dat$", input$variable1)))
})

inputVar2 <- reactive({
parse(text=sub(" ","",paste("dat$", input$variable2)))
})

output$out <- renderPrint({

if ( (input$bivariate==FALSE) & (is.factor(eval(inputVar1()))==TRUE) ) {
table(eval(inputVar1()))
} else {

if ( (input$bivariate==FALSE) & (is.numeric(eval(inputVar1()))==TRUE) ) {
summary(eval(inputVar1()))
} else {

if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
table(eval(inputVar1()), eval(inputVar2()))
} else {

if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
cor(eval(inputVar1()), eval(inputVar2()))
} else {

if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
by(eval(inputVar2()), eval(inputVar1()), summary)
} else { 

if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
by(eval(inputVar1()), eval(inputVar2()), summary)
}
}
}
}
}
}

})

})

あなたが提供できるどんな助けでも大いに感謝されるでしょう。変数の選択肢を指定して、コードを調整して2つの目的の出力をレンダリングする方法を示すだけでもかまいません。また、名前付きの出力を反映するようにヘッダーを調整する方法。

よろしくお願いします...クリス

8
Chris

質問がずっと前だったとしても、おそらくこのアプローチの方が優れていると思います。サーバー側に追加のコードは必要ありません。

mainPanel(

  wellPanel(
    conditionalPanel(
        condition = "input.myInput == 'value'",
        ..... Your UI for this case ...........
    ),

    conditionalPanel(
        condition = "input.myInput == 'value2'",
        ..... Your UI for this case ...........
    )                 
  )
  )
11
sirus

私はあなたのShinyコード(下記参照)をあなたが望むことをするように修正しました。単変量解析と二変量解析の選択に応じて、タブを切り替え、関連する結果を表示します。

大まかに言って、目的の動作を得るためにコードで変更しなければならなかったことは次のとおりです。

  1. 出力をセグメント化できるようにtabPanelが導入されました。
  2. observeリアクティブを導入し、ネストされたif-elseをそこで監視できるようにしました。
  3. 各オプションをそこにレンダリングできるように、複数のoutput $ variablesを作成しました。
  4. ヘッダーについては、それぞれのtabPanelsにh4を追加しただけです。

Screenshot of working Shiny App 以下に添付されているのは、完全に機能するコードです。それを出発点として使用し、そこから進んでください。

UI.R

library(shiny)
shinyUI(pageWithSidebar(
  headerPanel("Conditional Tab Switch Example"),
  sidebarPanel(
    wellPanel(
      selectInput(inputId = "variable1",label = "Select First Variable:", 
                  choices = c("Binary Variable 1 (Factor)" = "binary1",
                              "Binary Variable 2 (Factor)" = "binary2", 
                              "Continuous Variable 1 (Numeric)" = "cont1",
                              "Continuous Variable 2 (Numeric)" = "cont2"),
                  selected = "Binary Variable 1 (Factor)"
      )
    ),

    wellPanel(
      checkboxInput("bivariate", "Proceed to Bivariate Analysis", FALSE),
      conditionalPanel(
        condition="input.bivariate==true",
        selectInput(inputId = "variable2", 
                    label = "Select Second Variable:",
                    choices = c("Binary Variable 1 (Factor)" = "binary1",
                                "Binary Variable 2 (Factor)" = "binary2", 
                                "Continuous Variable 1 (Numeric)" = "cont1",
                                "Continuous Variable 2 (Numeric)" = "cont2"),
                    selected = "Binary Variable 2 (Factor)"
        )
      )
    )
  ),

    mainPanel(
      h5("Output"),
      tabsetPanel(id ="analysisTabs",
              tabPanel(title = "Univariate Numeric", value="panel_uni_numeric",
                       h4(" Univariate Numeric"),                       
                       verbatimTextOutput("uni_numeric")),
              tabPanel(title = "Univariate Factor", value="panel_uni_factor",
                       h4(" Univariate Factor"),                       
                       verbatimTextOutput("uni_factor")),
              tabPanel(title = "Bivariate Numeric-Numeric", value="panel_bi_nn",
                       h4(" Bivariate Numeric Numeric"),                       
                       verbatimTextOutput("bi_numeric1_numeric2")),
              tabPanel(title = "Bivariate Factor-Factor", value="panel_bi_ff",
                       h4(" Bivariate Factor Factor"),                       
                       verbatimTextOutput("bi_factor1_factor2")),
              tabPanel(title = "Bivariate Numeric-Factor", value="panel_bi_nf",
                       h4(" Bivariate Numeric Factor"),                       
                           verbatimTextOutput("bi_numeric1_factor2")),
              tabPanel(title = "Bivariate Factor-Numeric", value="panel_bi_fn",
                       h4(" Bivariate Factor Numeric"),                       
                       verbatimTextOutput("bi_factor1_numeric2"))

              )
        )  
  ))

Server.R

binary1 <- rbinom(100,1,0.5)
binary2 <- rbinom(100,1,0.5)
cont1   <- rnorm(100)
cont2   <- rnorm(100)

dat <- as.data.frame(cbind(binary1, binary2, cont1, cont2))

dat$binary1 <- as.factor(dat$binary1)
dat$binary2 <- as.factor(dat$binary2)
dat$cont1 <- as.numeric(dat$cont1)
dat$cont2 <- as.numeric(dat$cont2)

library(shiny)
#library(rCharts)

shinyServer(function(input, output, session) {

  inputVar1 <- reactive({
    parse(text=sub(" ","",paste("dat$", input$variable1)))
  })

  inputVar2 <- reactive({
    parse(text=sub(" ","",paste("dat$", input$variable2)))
  })


  output$uni_factor = renderText({
    if ( (input$bivariate==FALSE) & (is.factor(eval(inputVar1()))==TRUE) ) { 
      table(eval(inputVar1()))
    }
  })
  output$uni_numeric = renderPrint({
    if( (input$bivariate==FALSE) & (is.numeric(eval(inputVar1()))==TRUE) ) {
      summary(eval(inputVar1()))
    }
  })
  output$bi_factor1_factor2 = renderText({
    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
        table(eval(inputVar1()), eval(inputVar2()))
     }    
  })
  output$bi_numeric1_numeric2 = renderPrint({
    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) { 
        cor(eval(inputVar1()), eval(inputVar2()))
    }
  })
  output$bi_numeric1_factor2 = renderPrint({
    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) { 
       by(eval(inputVar2()), eval(inputVar1()), summary)
    }
  })
  output$bi_factor1_numeric2 = renderPrint({
    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) { 
       by(eval(inputVar1()), eval(inputVar2()), summary)
    }
  })


  observe({  
    if ( (input$bivariate==FALSE) & (is.factor(eval(inputVar1()))==TRUE) ) {
      print("uni f")
      updateTabsetPanel(session, inputId="analysisTabs", selected="panel_uni_factor")
    } 
    else if( (input$bivariate==FALSE) & (is.numeric(eval(inputVar1()))==TRUE) ) {
      print("uni n")
      updateTabsetPanel(session, inputId="analysisTabs", selected="panel_uni_numeric")
      } 
    else if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
      print("bi f f")
      updateTabsetPanel(session, inputId="analysisTabs", selected="panel_bi_ff")
        }
    else if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
      print("bi n n")
      updateTabsetPanel(session, inputId="analysisTabs", selected="panel_bi_nn")
          } 
    else if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
      print("bi f n")
      updateTabsetPanel(session, inputId="analysisTabs", selected="panel_bi_fn")
            } 
    else if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
      print("bi n f")
      updateTabsetPanel(session, inputId="analysisTabs", selected="panel_bi_nf")
    }

  })#end observe

})

更新コメントに基づいて、server.Rを更新して、結果をレンダリングする条件が満たされた場合にのみ結果を表示するようにしました。具体的には、output$uni_factor = renderText({タイプステートメントに続く各ifステートメントに注意してください。タブは引き続きクリックできますが、結果は表示されません。 (Shinyグループでは、タブ全体を非表示にすることについて議論がありましたが、私の知る限り、明示的に実装されていません。)

5
Ram Narasimhan

私は上記のように問題に取り組み続けました。選択した入力に基づいて条件付きでキャプションを生成するために、一連のネストされたifelseステートメントをserver.Rファイルに埋め込みました。 ui.RファイルのtextOutput()関数を使用して、これらのキャプションをmainPanelUIに表示します。これはかなりうまく機能しますが、最善のアプローチかどうかはわかりません。アプローチについての考えを聞きたいですか?

条件付き出力については...変数の選択と分析(単変量または二変量)に応じて、最大5つの出力を生成したいと思います。繰り返しになりますが、これらの出力を生成するために、ネストされた一連のifelseステートメントを使用します。次に、ui.Rファイルに表示します。私の現在の問題は、5個の出力(可能な最大値)を必要としない変数の組み合わせと分析に関係しています。それらについては、NULLオブジェクトを返します。私の問題は、Shinyがこれらの出力に空白の空白を印刷しないことです。むしろ光沢があり、灰色のボックスと単語「NULL」を返します。見た目は醜いので、この出力を単純に空白に変換する方法についてのフィードバックをいただければ幸いです。

私の新しいui.Rコードを以下に示します。

    library(shiny)
    shinyUI(pageWithSidebar(

headerPanel("Shiny Example"),

    sidebarPanel(

        wellPanel(

        selectInput(    inputId = "variable1",label = "Select First Variable:", 
                choices = c("Binary Variable 1" = "binary1",
                "Binary Variable 2" = "binary2", 
                "Continuous Variable 1" = "cont1",
                "Continuous Variable 2" = "cont2"),
                selected = "Binary Variable 1"
        )
        ),


        wellPanel(

            checkboxInput("bivariate", "Proceed to Bivariate Analysis", FALSE),
        conditionalPanel(
        condition="input.bivariate==true",
        selectInput(inputId = "variable2", 
        label = "Select Second Variable:",
        choices = c("Binary Variable 1" = "binary1",
        "Binary Variable 2" = "binary2", 
        "Continuous Variable 1" = "cont1",
        "Continuous Variable 2" = "cont2"),
        selected = "Binary Variable 2"
    )
    )
    )
    ),
    mainPanel(

    h5("Item Response Rate"),
    verbatimTextOutput("nitem"),

    h5(textOutput("caption2")),
    verbatimTextOutput("out2"),

    h5(textOutput("caption3")),
    verbatimTextOutput("out3"),

    h5(textOutput("caption4")),
    verbatimTextOutput("out4"),

    h5(textOutput("caption5")),
    plotOutput("out5")
    )
    ))

以下は私のserver.Rファイルのコードです:

    binary1 <- rbinom(100,1,0.5)
    binary2 <- rbinom(100,1,0.5)
    cont1   <- rnorm(100)
    cont2   <- rnorm(100)

    dat <- as.data.frame(cbind(binary1, binary2, cont1, cont2))

    dat$binary1 <- as.factor(dat$binary1)
    dat$binary2 <- as.factor(dat$binary2)
    dat$cont1 <- as.numeric(dat$cont1)
    dat$cont2 <- as.numeric(dat$cont2)

    library(shiny)

    shinyServer(function(input, output) {

    inputVar1 <- reactive({
    parse(text=sub(" ","",paste("dat$", input$variable1)))
    })

    inputVar2 <- reactive({
    parse(text=sub(" ","",paste("dat$", input$variable2)))
    })

    output$nitem <- renderPrint({


    if ( (input$bivariate==FALSE) & (is.factor(eval(inputVar1()))==TRUE) ) {
    n <- sum(table(eval(inputVar1())))
    p <- n/100
    out <- cat(paste(n,gsub(" ","",paste("(",round(as.numeric(p)*100,2),"%",")"))),"\n")
    } else {

    if ( (input$bivariate==FALSE) & (is.numeric(eval(inputVar1()))==TRUE) ) {
    n <- sum(table(eval(inputVar1())))
    p <- n/100
    out <- cat(paste(n,gsub(" ","",paste("(",round(as.numeric(p)*100,2),"%",")"))),"\n")
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    n <- sum(table(eval(inputVar1()),eval(inputVar2())))
    p <- n/100
    out <- cat(paste(n,gsub(" ","",paste("(",round(as.numeric(p)*100,2),"%",")"))),"\n")
    } else {

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    n <- sum(table(eval(inputVar1()),eval(inputVar2())))
    p <- n/100
    out <- cat(paste(n,gsub(" ","",paste("(",round(as.numeric(p)*100,2),"%",")"))),"\n")
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    n <- sum(table(eval(inputVar1()),eval(inputVar2())))
    p <- n/100
    out <- cat(paste(n,gsub(" ","",paste("(",round(as.numeric(p)*100,2),"%",")"))),"\n")
    } else { 

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    n <- sum(table(eval(inputVar1()),eval(inputVar2())))
    p <- n/100
    out <- cat(paste(n,gsub(" ","",paste("(",round(as.numeric(p)*100,2),"%",")"))),"\n")
    }
    }
    }
    }
    }
    }

    })

    output$caption2 <- renderText({

    if ( (input$bivariate==FALSE) & (is.factor(eval(inputVar1()))==TRUE) ) {
    caption2 <- "Univariate Table"
    } else {

    if ( (input$bivariate==FALSE) & (is.numeric(eval(inputVar1()))==TRUE) ) {
    caption2 <- "Univariate Summary"
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    captions2 <- "Bivariate Table"
    } else {

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    caption2 <- "Numeric Summary First Variable"
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    caption2 <- "Numeric Summary By Factor"
    } else { 

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    caption2 <- "Numeric Summary By Factor"
    }
    }
    }
    }
    }
    }

    })

    output$out2 <- renderPrint({

    if ( (input$bivariate==FALSE) & (is.factor(eval(inputVar1()))==TRUE) ) {
    table(eval(inputVar1()))
    } else {

    if ( (input$bivariate==FALSE) & (is.numeric(eval(inputVar1()))==TRUE) ) {
    summary(eval(inputVar1()))
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    table(eval(inputVar1()), eval(inputVar2()))
    } else {

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    summary(eval(inputVar1()))
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    by(eval(inputVar2()), eval(inputVar1()), summary)
    } else { 

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    by(eval(inputVar1()), eval(inputVar2()), summary)
    }
    }
    }
    }
    }
    }

    })

    output$caption3 <- renderText({

    if ( (input$bivariate==FALSE) & (is.factor(eval(inputVar1()))==TRUE) ) {
    caption3 <- "Univariate Table of Proportions"
    } else {

    if ( (input$bivariate==FALSE) & (is.numeric(eval(inputVar1()))==TRUE) ) {
    caption3 <- ""
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    captions3 <- "Bivariate Table of Row Proportions"
    } else {

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    caption3 <- "Numeric Summary Second Variable"
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    caption3 <- "Kruskal Wallis Test"
    } else { 

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    caption3 <- "Kruskal Wallis Test"
    }
    }
    }
    }
    }
    }

    })


    output$out3 <- renderPrint({

    if ( (input$bivariate==FALSE) & (is.factor(eval(inputVar1()))==TRUE) ) {
    prop.table(table(eval(inputVar1())))
    } else {

    if ( (input$bivariate==FALSE) & (is.numeric(eval(inputVar1()))==TRUE) ) {
    NULL
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    prop.table(table(eval(inputVar1()), eval(inputVar2())), margin=1)
    } else {

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    summary(eval(inputVar2()))
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    kruskal.test(eval(inputVar2()) ~ eval(inputVar1()))
    } else { 

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    kruskal.test(eval(inputVar1()) ~ eval(inputVar2()))
    }
    }
    }
    }
    }
    }

    })

    output$caption4 <- renderText({

    if ( (input$bivariate==FALSE) & (is.factor(eval(inputVar1()))==TRUE) ) {
    caption4 <- ""
    } else {

    if ( (input$bivariate==FALSE) & (is.numeric(eval(inputVar1()))==TRUE) ) {
    caption4 <- ""
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    captions4 <- "Pearsons Chi-Squared Test"
    } else {

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    caption4 <- "Spearmans Correlation Coefficient"
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    caption4 <- ""
    } else { 

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    caption4 <- ""
    }
    }
    }
    }
    }
    }

    })

    output$out4 <- renderPrint({

    if ( (input$bivariate==FALSE) & (is.factor(eval(inputVar1()))==TRUE) ) {
    NULL
    } else {

    if ( (input$bivariate==FALSE) & (is.numeric(eval(inputVar1()))==TRUE) ) {
    NULL
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    chisq.test(table(eval(inputVar1()), eval(inputVar2())))
    } else {

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    cor(eval(inputVar1()), eval(inputVar2()), method="spearman", use="pairwise.complete.obs")
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    NULL
    } else { 

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    NULL
    }
    }
    }
    }
    }
    }

    })

    output$caption5 <- renderText({

    if ( (input$bivariate==FALSE) & (is.factor(eval(inputVar1()))==TRUE) ) {
    caption5 <- "Univariate Barplot"
    } else {

    if ( (input$bivariate==FALSE) & (is.numeric(eval(inputVar1()))==TRUE) ) {
    caption5 <- "Univariate Histogram"
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    captions5 <- "Bivariate Barplot"
    } else {

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    caption5 <- "Bivariate Scatter Graph"
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    caption5 <- "Bivariate Boxplot"
    } else { 

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    caption5 <- "Bivariate Boxplot"
    }
    }
    }
    }
    }
    }

    })

    output$out5 <- renderPlot({

    if ( (input$bivariate==FALSE) & (is.factor(eval(inputVar1()))==TRUE) ) {
    barplot(table(eval(inputVar1())))
    } else {

    if ( (input$bivariate==FALSE) & (is.numeric(eval(inputVar1()))==TRUE) ) {
    hist(eval(inputVar1()),main="")
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    barplot(table(eval(inputVar1()), eval(inputVar2())), beside=TRUE)
    } else {

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    plot(eval(inputVar1()), eval(inputVar2()), main="")
    } else {

    if ( (input$bivariate==TRUE) & (is.factor(eval(inputVar1()))==TRUE) & (is.numeric(eval(inputVar2()))==TRUE) ) {
    boxplot(eval(inputVar2()) ~ eval(inputVar1()))
    } else { 

    if ( (input$bivariate==TRUE) & (is.numeric(eval(inputVar1()))==TRUE) & (is.factor(eval(inputVar2()))==TRUE) ) {
    boxplot(eval(inputVar1()) ~ eval(inputVar2()))
    }
    }
    }
    }
    }
    }

    })

    })

前述のように、私の現在の問題は「NULL」出力の印刷です。この出力が表示されないようにする方法について誰かが提案を持っている場合は、フィードバックをいただければ幸いです。また、提案された解決策と他の実行可能な解決策についての考えを歓迎します。

1
Chris