我正在写一个R闪亮的应用程序,我有一个Ui。 R为用户提供了选择多个选项,每个选项都映射到一个包含两列数据的制表符分隔文件。
我希望它有一个带有标签的主表,其中一个标签打印表格(由用户选择)一个在另一个之下。
这是我的代码:
Ui.R
shinyUI(pageWithSidebar(
headerPanel(strong(" ", style="color:black"), windowTitle="T2P"),
sidebarPanel(
tags$head(
tags$style(type='text/css', "input { width: 100px; }"),# control numericInput box ,
tags$style(type='text/css', "select,textarea,.jslider,.well { background-color: #F0F0F0; } ")
),
selectInput("var",
label = (strong("Choose Feature DataSets for Analysis", style="color:black")),
choices = c(" ","Gene Ontology", "PFAM",
"SecondaryStructures", "PeptideStats"),
selected = "", multiple=TRUE)
),
mainPanel(
tags$head(
tags$style(type = "text/css", "a{color: black;}")
),
list(tags$head(tags$style("body {background-color: #F5F5F5; }"))),
##
tabsetPanel(id="tabSelected",
tabPanel("Introduction", style="color:black",
h1("Introduction"),
textOutput("myselection"),
br()
# tableOutput("myGO")
),
tabPanel("Table", style="color:black",
h1("Table"),
# tableOutput("myselection2Table")
tableOutput("myGO"),
# br(),
tableOutput("myPFAM")
)
)
)
)
)
server.R
shinyServer(
function(input, output)
{
output$myGO <- renderTable({
myGOdata <- {
if (input$var %in% "Gene Ontology")
{
data.frame(read.table("GO.txt", sep="\t",header=TRUE))
}
}
})
output$myPFAM <- renderTable({
if (input$var %in% "PFAM")
{
data.frame(read.table("PFAM.txt", sep="\t",header=TRUE))
}
})
}
)
答案 0 :(得分:3)
在您的条件中&#34; if(输入$ var%in%&#34; PFAM&#34;)&#34;你逐个测试,如果&#34;输入$ var&#34;在&#34; PFAM&#34;中,它为每个元素返回一个布尔值。
If
语句无法处理返回多个布尔值的表达式,这就是为什么你可能会收到这样的警告:Warning in if (input$var %in% "Gene Ontology") { :
the condition has length > 1 and only the first element will be used
反转你的测试,它应该是:&#34; if(&#34; Gene Ontology&#34;%in%input $ var)&#34;。您需要测试&#34; Gene Ontology&#34;在&#34;输入$ var&#34;而不是相反。
Normaly,现在应该可以了。