我有两个数据表:DT1
和DT2
。每个变量都有一个X变量:x
和三个Y变量:y1
,y2
和y3
。我的目标是创建一个基本的Shiny应用程序,其中数据集和Y变量都可由用户选择。
library(data.table)
set.seed(123)
#y1 between 1 and 50
DT1 <- data.table(x=c(1:10),
y1 = round(runif(10, 1, 50)))
#y2 between 51 and 100
DT2 <- data.table(x=c(1:10),
y1 = round(runif(10, 51, 100)))
#y2 and y3 are double and triple multiples of y1
DT1[, y2 := y1*2][, y3 := y1*3]
DT2[, y2 := y1*2][, y3 := y1*3]
library(shiny)
library(ggplot2)
ui <- fluidPage(
selectInput(inputId = 'input1', label = 'Choose a data table',
choices = c("1st" = "data1", "2nd" = "data2")),
plotOutput(outputId = "graph")
)
server <- function(input, output) {
output$graph <- renderPlot({
dt <- switch(input$input1, data1=DT1, data2=DT2) #data switch
ggplot(dt, aes(x, y1)) + geom_point() + geom_line()
})
}
shinyApp(ui, server)
到目前为止,这么好。应用程序正常工作,绘制的数据表可由用户选择。
library(shiny)
library(ggplot2)
ui <- fluidPage(
selectInput(inputId = 'input1', label = 'Choose a data table',
choices = c("1st" = "data1", "2nd" = "data2")),
selectInput(inputId = 'input2', label = 'Choose a Y-variable',
choices = c("Y-1" = "Y_1", "Y-2" = "Y_2", "Y-3" = "Y_3")),
plotOutput(outputId = "graph")
)
server <- function(input, output) {
output$graph <- renderPlot({
dt <- switch(input$input1, data1=DT1, data2=DT2) #data switch
var <- switch(input$input2, Y_1=y1, Y_2=y2, Y_3=y3) #Y-variable switch
ggplot(dt, aes(x, var)) + geom_point() + geom_line()
})
}
shinyApp(ui, server)
这不起作用!
有什么问题?
答案 0 :(得分:0)
y1
在您调用它的环境中不存在,它适用于ggplot2 aes
和data.table [
,因为这些函数使用非标准评估。
要解决您的问题,请执行以下操作:
var <- switch(input$input2, Y_1 = "y1", Y_2 = "y2", Y_3 = "y3")
ggplot(dt, aes_string("x", var)) + geom_point() + geom_line()
如果您在ui中重新定义选项,switch
步骤是可选的,例如:choices = c("Y-1" = "y1", "Y-2" = "y2", "Y-3" = "y3")
,以及服务器:ggplot(dt, aes_string("x", input$input2)) + geom_point() + geom_line()
。
您可以阅读: