- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Shiny App 中遇到了一个看似很小但很棘手的响应式(Reactive)函数问题。
该应用程序旨在在选择公司时显示折线图,并在选择“全部”时显示所有公司的条形图。例如在选择时:
按类别 1 过滤 = 3 并按类别 1 过滤:用户界面中的 2,公司下拉列表中只剩下 4 家公司,然后我希望能够在公司下拉列表中选择公司 A 以获得公司 A 的折线图.
问题是,当我选择公司 A 时,它会显示公司 A 的折线图 1 秒,然后跳回“全部”。
我认为问题在于以下几行:
output$firm <- renderUI({
selectInput("firm", "Filter by Firm:",
choices = c("All",as.character(unique(subset_data()$FIRM))))
})
set.seed(1)
df <- data.frame(FIRM=rep(LETTERS[1:7],each=10), CATEG_1=rbinom(70,4,0.9),CATEG_2=rbinom(70,1,0.2),date=as.Date("2014-01-01")+1:10,y1=sample(1:100,70))
library(shiny)
library(rCharts)
library(doBy)
library(plyr)
shinyApp(ui =
shinyUI(pageWithSidebar(
# Application title
headerPanel("Example"),
sidebarPanel(
uiOutput("firm"),
# selectInput("firm", "Filter by firm:",
# choices = unique(as.character(df))),
selectInput("categ_1", "Filter by Category 1:",
choices = c("All",unique(as.character(df$CATEG_1)))),
selectInput("date", "Filter by Date:",
choices = c("All","Last 28 Days","Last Quarter")),
selectInput("categ_2", "Filter by Category 2:",
choices = c("All",unique(as.character(df$CATEG_2))))
), #sidebarPanel
mainPanel(
h4("Example plot",style = "color:grey"),
showOutput("plot", "nvd3")
) # mainPanel
) #sidebarLayout
) #shinyU
,
server = shinyServer(function(input, output, session) {
subset_data <- reactive({df <- filter_data(df,input$firm,
input$date,
input$categ_1,
input$categ_2)
shiny::validate(need(!is.null(df),"No data to display"))
return(df)})
output$firm <- renderUI({
selectInput("firm", "Filter by Firm:",
choices = c("All",as.character(unique(subset_data()$FIRM))))
})
output$plot<-renderChart2({ build_plot(subset_data()) })
##############
#below are the functions used in the code
##############
# function for date subsetting
filter_date<-function(df,dateRange="All"){
filt <- df
td <- max(as.Date(filt$date))
if (dateRange=='Last 28 Days'){filt <-filt[filt$date>=(td-28),]}
if (dateRange=='Last Quarter'){filt <-filt[filt$date>=(td-84),]}
return(filt)
} # filter by date
# function for data subsetting
filter_data<-function(df,firm=NULL,dateRange="All",categ_1=NULL,categ_2=NULL)
{
filt<-filter_date(df,dateRange)
if (!is.null(firm)) {
if(firm!='All') {filt <- filt[filt$FIRM==firm,]}
}
if (!is.null(categ_1)){
if (categ_1!='All') {filt <- filt[filt$CATEG_1==categ_1,]}
}
if (!is.null(categ_2)) {
if (categ_2!='All') {filt <- filt[filt$CATEG_2==categ_2,]}
}
if(nrow(filt)==0) {filt <- NULL}
return(filt)
} # prepare data to be plotted
# function to create plot
build_plot <- function(df) {
plotData<-df
# If 1 partner selected, time series is shown
if (length(as.character(unique(plotData$FIRM)))==1) {
tabledta<-summaryBy(y1~FIRM+date,data=plotData,FUN=sum,keep.names=TRUE)
filler = expand.grid(FIRM=as.character(unique(df$FIRM)),
date=seq(min(tabledta$date),max(tabledta$date),by='1 day'))
df = merge(filler,
tabledta,
by=c('date','FIRM'),
all.x=T)
df[is.na(df)]=0
p <- nPlot(y1 ~ date, group = 'FIRM', data = df, type = 'lineChart')
p$chart(margin=list(left=150))
p$yAxis(showMaxMin = FALSE)
p$xAxis(tickFormat ="#!function(d) {return d3.time.format('%Y-%m-%d')(new Date(d * 24 * 60 * 60 * 1000));}!#")
p
}
# If "All" partners are selected, barchart of Top 5 is shown
else{
SummaryTab<-aggregate(y1~FIRM,data=plotData,FUN=sum)
SummaryTab$rank=rank(SummaryTab$y1)
SummaryTab$rank[SummaryTab$rank>5]<-6
if (length(SummaryTab$rank)>5) {
#Top 5 partners in terms of y1 are shown
top5<-SummaryTab[SummaryTab$rank<=5,]
# other partners are collapsed, shown as 1 entry
others<-aggregate(y1~rank,data=SummaryTab,FUN=sum)
others<-others[others$rank==6,]
others$FIRM<-"Others"
# Create the summarytable to be plotted
plotData=rbind(top5,others)}
tabledta<-summaryBy(y1~FIRM,data=plotData,FUN=sum,keep.names=TRUE)
tabledta<-arrange(tabledta,y1)
# if(is.null(tabledta)) {print("Input is an empty string")}
p <- nPlot(y1 ~ FIRM,data = tabledta, type = 'multiBarHorizontalChart')
p$chart(margin=list(left=150))
p$yAxis(showMaxMin = FALSE)
p
}
}
}) #shinyServer
)
最佳答案
问题是 output$firm 在您的代码中是自 react 的,因为它取决于 input$firm。
output$firm 表达式为 input$firm 生成一个用户界面,它会自动触发对所有依赖于 input$form 的响应式(Reactive)表达式的重新评估。其中一种响应式(Reactive)表达式是 output$firm 本身(它通过 subset_data() 依赖 input$firm),因此每次调用 output$firm 都会导致其递归重新评估。
您需要隔离subset_data() 表达式,这将防止触发subset_data() 中的更改:
output$firm <- renderUI({
input$date
input$categ_1
input$categ_2
selectInput("firm", "Filter by Firm:",
choices = c("All",as.character(unique(isolate(subset_data()$FIRM)))))
})
关于r - Shiny :renderUI react 性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27726394/
我正在通过 Rscript.exe 在托管到我的本地网络的服务器上运行 Shiny 应用程序。如果我们要将其移植到网上,我们可以通过我们设置的服务器基础设施来实现。 Shiny Server 是否添加
当我运行我的 Shiny 应用程序时,我的数据表的标题向左移动。见下文。 假设这张表在选项卡 A 上。 当我单击不同的选项卡(选项卡 B)时,标题会正确对齐,然后再次单击选项卡 A。有关更正的标题,请
是否有查询正在运行的 RStudio Shiny 网页以显示正在运行的服务器版本的变量或方法?例如。显示类似 shiny-0.10.1在网页上。 有任何想法吗? 最佳答案 您可以使用 packageV
我想在以下位置重现示例:https://scip.shinyapps.io/scip_app/ 基本上,我有一个 300 x 300 调整后的相关矩阵和一个 300 x 300 未调整的相关矩阵,我想
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 去年关闭。 社区去年审查了是否重
在我部署应用程序时,应用程序中仍然存在一些异常情况,因此我想将它们从我的帐户中删除。我试过了,但没有找到任何选择。任何帮助将不胜感激。谢谢 最佳答案 在从 shiny.io 填充 token 信息后,
据我了解,Shiny Server 的开源版本不支持身份验证。 我们有一个环境使用 WebSEAL 代理服务来验证用户并将他们的访问引导到 Web 应用程序。 我们希望向经过身份验证的用户公开 Shi
我想将一个 R 应用程序(在装有 OS RHEL6.8 的实际 Shiny 服务器上运行良好)转移到另一个"new" Shiny 服务器。我的应用程序在第一台服务器上运行良好。这个想法是将它放在性能更
我正在通过 #RMarkdown 创建一个测试页面并尝试在其中添加 #Shiny 内容。在编织到 HTML 时,我收到以下错误。 Error in appshot.shiny.appobj(list(
有没有一种简单的方法可以在 shiny 中创建这样的东西? 最佳答案 RStudio 目前正在处理 sortable 包:RStudio/sortable 请注意,它目前正在开发中(标记为实验性),因
当我在一个非常简单的 Shiny 应用程序中按下操作按钮时,我试图调用另一个 Shiny 的应用程序。另一个应用程序位于一个带有 ui.R 和 server.R 文件的名为 Benefits 的文件夹
我最近试图在我的服务器上打开一个 Shiny 的服务器应用程序,并遇到了我以前从未见过的错误。 Error in loadNamespace(j -c "R -e \"install.pack
我有 Shiny 的应用程序,它显示旧数据(延迟 4 天!),但服务器数据已刷新(当天)。 奇怪的是,服务器上不存在旧数据集 - 似乎只存在于 Shiny 缓存中。 在服务器上,我有 1 个数据集由
我有一个在本地 R 服务器(端口 8787)上运行的应用程序。当我将它移动到 Shiny Server(端口 3838)时,我收到消息 ERROR: An error has occurred. Ch
我试图消除此表格与浏览器窗口左侧之间的空间,但当我这样做时,它弄乱了导航栏链接和标题的间距。 如何在不改变 navbar/ui/li 元素的填充/边距的情况下删除 excelR 表上的填充/边距? l
我已经阅读并实现了来自 link 的 Shiny 表中的复选框.但是当我在 R 中运行时,列中的输出是 , 等在每个“选择”单元格中,我希望“选择”列中的输出是复选框,我的问题的解决方案是什么?谢谢
我一直在开发一个 Shiny 的应用程序,它开始变得相当大。 我通过将应用程序的不同部分放入各自文件中的模块中解决了这个问题,然后获取文件。 问题是,当我在源文件的服务器部分(下例中的 events.
我对 Shiny 和 DataTables 还很陌生,所以这可能是个愚蠢的问题。由于某种原因,我无法更改列宽。我试过了 output$table<-DT::renderDataTable( {w
我安装了我的 Shiny 服务器,它在这个目录下的多个应用程序上工作正常: /srv/ Shiny 服务器/app1/srv/ Shiny 服务器/app2 我可以使用 www.mydomain.co
我想在我的 Shiny 应用程序中包含我的 myMardown.md 文档。 为了显示目录,我使用了 toc 选项,还使用了 css (myStyle.css) myMarkdown.md : ---
我是一名优秀的程序员,十分优秀!