我无法过滤反应数据集。我需要根据用户输入在我的电脑上调用不同的数据集;由于这些数据集具有相同的行名称,我想为它们定义一个过滤器 对于这个问题,我制作了两个简单的数据集。非常感谢你提前。
用户界面
library(shiny)
ui <- fluidPage(
sidebarLayout(sidebarPanel(selectInput('number', h4("Select number"),
choices = c("first", "second")),
selectInput('dataset', h4("Select dataset"),
choices=c("dataset1",
"dataset2"))),
mainPanel(
plotOutput("graph")
)))
SERVER
server <- function(input, output) {
library(ggplot2)
library(dplyr)
dataset1 <- data.frame(names=c("first", "second"),
X1=rnorm(1:10),X2=rnorm(1:10),X3=rnorm(1:10))
dataset2 <- data.frame(names=c("first", "second"),
X1=rnorm(1:10),X2=rnorm(1:10),X3=rnorm(1:10))
plotdata <- reactive ({get(input$dataset)
if(input$number == "first") {
filter(plotdata, names=="first")}
else if(input$number == "second") {
filter(plotdata, names=="second")}
})
output$graph <- renderPlot({
datos <- plotdata()
ggplot(datos, aes(X1, X2)) +
geom_col()
})
}
shinyApp(ui = ui, server = server)
我得到以下 错误:没有适用的方法来过滤_&#39;适用于班级&#34; c(&#39; reactiveExpr&#39;,&#39;被动&#39;)&#34;
但是,当反应数据部分被以下代码替换时,它会使图形没有问题,但我必须定义变量和数据集之间的所有可能组合(这不是一个选项,因为真实数据集是5个批次要在UI上选择的变量和行):
plotdata <- reactive ({
if(input$number == "first") {
filter(dataset1, names=="first")}
else if(input$number == "second") {
filter(dataset1, names=="second")}
})
那么如何使用dplyr ??
从反应数据集中过滤答案 0 :(得分:0)
您需要将反应数据称为函数plotdata()
答案 1 :(得分:0)
你可以这样做:
library(shiny)
ui <- fluidPage(
sidebarLayout(sidebarPanel(selectInput('number', h4("Select number"),
choices = c("first", "second")),
selectInput('dataset', h4("Select dataset"),
choices=c("dataset1",
"dataset2"))),
mainPanel(
plotOutput("graph")
))
)
server <- function(input, output) {
library(ggplot2)
library(dplyr)
dataset1 <- data.frame(names=c("first", "second"),
X1=rnorm(1:10),X2=rnorm(1:10),X3=rnorm(1:10))
dataset2 <- data.frame(names=c("first", "second"),
X1=rnorm(1:10),X2=rnorm(1:10),X3=rnorm(1:10))
plotdata <- reactive ({
dataset <- get(input$dataset)
dataset %>% filter(names==input$number)
})
output$graph <- renderPlot({
datos <- plotdata()
ggplot(datos, aes(X1, X2)) +
geom_col()
})
}
shinyApp(ui = ui, server = server)
但是,我的建议是不使用get
,而是将数据集存储在命名列表中,如datasets <- list('dataset1'=1, 'dataset2'=2)
之类的内容,然后使用datasets[[input$dataset]]
调用
希望这有帮助!