我试图在一个应该绘制图形的闪亮应用程序中包含复选框。 我的问题似乎很简单,但我自己无法解决:(尽管StackOverflow或R帮助工具上有多个CheckboxGroupInput问题...
所以,我有一项科学研究,包括8篇论文(命名为1至8)和5篇控制论文(称为PC1至PC5)。 我希望我的应用程序通过复选框询问您要查看哪些文章,并在同一图形中绘制它们。 请注意我已经有一个下拉菜单,询问您希望看到哪两个变量(在2个图形中),这就像魅力一样。
以下是我的ui简化版:
ui <- dashboardPage(
dashboardHeader(title="Test",
dropdownMenu(type = "notifications",
notificationItem(
text = "Verifier les points centraux",
icon = icon("exclamation-triangle"),
status = "warning"
)
)
),
dashboardSidebar(
sidebarMenu(
menuItem("Suivi par Variable", tabName = "SuiviVariable", icon =
icon("area-chart"))
)
),
dashboardBody(
# Suivi par Variable tab content
tabItem(tabName = "SuiviVariable",
h2("Graphique de Suivi pour Chaque Variable d'Intérêt"),
fluidRow(
box(title = "Choisir deux variables à comparer", status =
"info",br(),
selectInput("Variable1", label = "Variable 1",
choices = list_variables,
selected = list_variables[1]),
selectInput("Variable2", label = "Variable 2",
choices = list_variables,
selected = list_variables[1]),
checkboxGroupInput("Essais", "Essais à afficher :",c(1:8,"PC1", "PC2", "PC3", "PC4", "PC5")),
plotOutput("plot5", height = 600),
plotOutput("plot6", height = 600)
)
)
)
))
ui部分似乎没问题,因为复选框显示正确。
这是服务器部分:
server<-function(input, output){
output$plot5 <- renderPlot({
a<- as.vector(input$Essais)
dataTest <- as.data.frame(TrameTest[a,])
ggplot(data=dataTest, aes(x= N_ByEssai,y=dataTest[,input$Variable1], group= Nom, colour=Nom))+
geom_line()+
xlab("Duree de l'Essai")+
ylab(input$Variable1)
})
output$plot6 <- renderPlot({
dataTest <- as.data.frame(TrameTest[input$Essais,])
ggplot(data=dataTest, aes(x= N_ByEssai,y=dataTest[,input$Variable2],group= Nom, colour=Nom))+
geom_line()+
xlab("Duree de l'Essai")+
ylab(input$Variable2)
})}
在那里你可以看到我试图使用输入$ Essais,徒劳无功。 我已经读过CheckboxGroupOutput返回一个字符向量,我觉得这可能是我的问题所以我试图用as.vector欺骗它,但它并没有改变结果: 根据选中的方框,我会得到一个空图形或带有图例PC1 / NA的图形,以及一个只有我不认识的值的线(?!)。
你知道我为什么不能使用TrameTest [输入$ Essais]作为我的x值吗?是因为它不是矢量吗? 你有可以用作参考的CheckboxGroupInput的simle(我对R还不是很好)的例子吗?
提前感谢您的时间和想法
答案 0 :(得分:0)
我找到了有用的东西! 在服务器部分,我首先对我的数据帧(TrameTest)进行子集化,只保留名称对应于输入$ Essais的行。 然后使用我的子集化数据帧(dataTest)来简化绘图。
output$plot5 <- renderPlot({
dataTest<-subset(TrameTest, TrameTest[,2] %in% input$Essais)
ggplot(data=dataTest, aes(x= N_ByEssai,y=dataTest[,input$Variable1], group = Nom, colour=Nom))+
geom_line()+
xlab("Duree de l'Essai")+
ylab(input$Variable1)
})
答案 1 :(得分:0)
你的问题不是闪亮而是对选择的误解。
TrameTest[input$Essais,]
检查是否找到与input$Essais
对应的rownames,并选择这些行。但是从您的代码和您自己的答案中可以清楚地看到,您希望第{2}行中出现input$Essais
的行。这是完全不同的事情,首先是rownames必须是唯一的,而你的新代码允许多次出现input$Essais
。
也就是说,在subset()
:
?subset
内部函数
这是一种便于交互使用的便利功能。对于 编程最好使用标准的子集函数 [,特别是论证子集的非标准评估 可能会产生意想不到的后果。
为了获得最佳代码,请执行:
output$plot5 <- renderPlot({
id <- TrameTest[, 2] %in% input$Essais
dataTest <- TrameTest[ id , ]
ggplot(data=dataTest, aes(x= N_ByEssai,y=dataTest[,input$Variable1], group = Nom, colour=Nom))+
geom_line()+
xlab("Duree de l'Essai")+
ylab(input$Variable1)
})