我想在闪亮的仪表板上使用不同的下拉底部来过滤数据集,该数据集由第一个下拉字段读取。第一个下拉底部在数据文件夹中的所有文件名上循环,加载并绘制数据(效果很好)。 在下一步中,我要应用评级作为过滤器,该过滤器由另一个下拉底部选择。但是,出现以下错误
if(dataRating =
^
Warning: Error in sourceUTF8: Error sourcing C:\Temp\RtmpScI3tC\fileb32838a12cde
Stack trace (innermost first):
1: runApp
Error in sourceUTF8(serverR, envir = new.env(parent = globalenv())) :
Error sourcing C:\Temp\RtmpScI3tC\fileb32838a12cde
我的 Gui :
library("shiny")
# Define UI for dataset viewer app ----
ui <- fluidPage(
# App title ----
titlePanel("Default"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
# Input: Selector for choosing dataset ----
selectInput(inputId = 'date',
label = 'Choose a date:',
choices = list.files(path = "C:/R_myfirstT/data",
full.names = FALSE,
recursive = FALSE)),
# Input: Selector for choosing dataset ----
selectInput(inputId = 'rating',
label = 'Choose the rating:',
choices = c("All",0,1,2,3))
),
# Main panel for displaying outputs ----
mainPanel(
plotOutput("plot")
)
)
)
和服务器:
# Define server ----
server <- function(input, output) {
# Rating
dataRating <- reactive({
rating <- input$rating
if (is.null(infile)){
return(NULL)
}
})
#
dataset <- reactive({
infile <- input$date
if (is.null(infile)){
return(NULL)
}
read.csv(paste0('C:/R_myfirstT/data',infile),header=TRUE, sep=";")
})
### OutPut
if(dataRating ="All"){
output$plot <- renderPlot({
x <- dataset()$Marktwert
hist(x, breaks = 40)
})
}
}
我想知道,
特殊:
在这种情况下我怎么了?
通常:
如何使用data.table操作作为过滤器来应用来自不同下拉菜单的不同输入?
附录:
我将if
语句更改为if(dataRating() =="All")
和
dataRating <- reactive({
rating <- input$rating
到
dataRating <- reactive({
dataRating <- input$rating
我找到了一个建议here。但是,我收到另一个错误
Error in .getReactiveEnvironment()$currentContext() :
Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)
样本数据如下:
stand Rating LGD Marktwert EL absolut
6010 3 3 1142345261 1428757
6010 3 3 849738658 1028973
6010 1 3 1680222820 220554
6010 1 3 896459567 116673
6010 0 3 1126673222 72077
6010 1 3 704226037 93310
- 1 4 336164879 49299
6010 0 3 948607746 60443
6070 1 3 265014117 34170
6020 3 3 47661945 58551
6050 2 3 307011781 115959
6020 0 1 1064022992 20320
6010 0 3 831782040 52950
6080 3 3 19367641 20286
- 2 4 197857365 87608
6010 1 3 679828856 90884
6050 3 3 317092037 372362
6080 3 3 20223616 21929
6010 1 3 693736624 96899
6050 3 3 308447822 372915
6010 4 3 177281455 862068
答案 0 :(得分:1)
不幸的是,我没有数据文件来测试自己,但是使用Gregor的注释,请尝试编辑以下代码:
### OutPut
if(dataRating ="All"){
output$plot <- renderPlot({
x <- dataset()$Marktwert
hist(x, breaks = 40)
})
}
收件人:
### OutPut
output$plot <- renderPlot({
if(dataRating() == "All"){
x <- dataset()$Marktwert
hist(x, breaks = 40)
}
})
注意:您正确的一点是,需要使用dataRating
来调用作为反应性值的dataRating()
。但是,您需要像现在这样在外部而不是外部调用它(如错误消息所示)。此外,在这种情况下,您需要==
。您的修改:
dataRating <- reactive({
rating <- input$rating
到
dataRating <- reactive({
dataRating <- input$rating
不必要。
答案 1 :(得分:1)
我试图测试对数据的猜测。请在您这一边进行测试:
更新:添加示例数据后,我进行了一些修改。
library("shiny")
# Define UI for dataset viewer app ----
ui <- fluidPage(
# App title ----
titlePanel("Default"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
# Input: Selector for choosing dataset ----
selectInput(inputId = 'date',
label = 'Choose a date:',
choices = list.files(path = "C:/R_myfirstT/data",
full.names = FALSE,
recursive = FALSE)),
# Input: Selector for choosing dataset ----
selectInput(inputId = 'rating',
label = 'Choose the rating:',
choices = c("All",0,1,2,3))
),
# Main panel for displaying outputs ----
mainPanel(
plotOutput("plot")
)
)
)
# Define server ----
server <- function(input, output) {
# Rating
dataRating <- reactive({
input$rating
})
#
dataset <- reactive({
infile <- input$date
if (is.null(infile)){
return(NULL)
}
read.csv(paste0('C:/R_myfirstT/data/',infile),header=TRUE, sep=";")
})
### OutPut
output$plot <- renderPlot({
if(dataRating() =="All"){
x <- dataset()$Marktwert
hist(x, breaks = 40)
}
})
}
shinyApp(ui, server)
一些评论:
“错误:找不到对象'infile'”是由以下代码块引起的:
# Rating
dataRating <- reactive({
rating <- input$rating
if (is.null(infile)){
return(NULL)
}
})
infile
在这里不存在。请记住,在dataset
反应式中,您首先拥有infile <- input$date
。
此外,为了给dataRating
赋值,您需要像我一样将input$rating
放在reactive
的末尾,或者放置return(input$rating)
。将read.csv(paste0('C:/R_myfirstT/data',infile),header=TRUE, sep=";")
放置在dataset
反应性代码块的末尾时,您所做的操作类似。