我想构建一个应用程序,在用户键入正确的密码之前,某些选项卡将对用户隐藏。我知道如何使用shinyjs::hideTab:
library(shiny);library(shinyjs)
ui <- fluidPage(useShinyjs(),
navbarPage("hello", id="hello",
tabPanel("home", br(), h3("this is home"),passwordInput("pass", "enter 'password' to see the tabs: "),actionButton("enter", "enter")),
tabPanel("tab2", br(), h4("this is tab2")),
tabPanel("tab3 with a lot of stuff in it", br(), h4("this is tab3"))))
server <- function(input, output, session) {
hideTab("hello", "tab2"); hideTab("hello", "tab3 with a lot of stuff in it")
observeEvent(input$enter, {
if (input$pass == "password"){showTab("hello", "tab2"); showTab("hello", "tab3 with a lot of stuff in it")}})}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)
但是,有一点“东西”。在我的应用程序中,隐藏标签有很多的东西,比如小部件,uiOutputs,图表,图像,global.R文件阅读等的结果是,加载时间更高,在这个应用程序的加载时间(前hideTab指令开始运行),用户实际上会看到隐藏的选项卡,甚至可以单击它们并查看其中的内容。他们保持“可见”状态大约1秒钟,然后被隐藏。
有没有办法让它们在构建UI之前立即隐藏?我更喜欢一个解决方案,而不必将我的所有ui代码放入server.R脚本中...
谢谢
我能够在我闪亮的应用程序中渲染数据表。但是,只要有宽表,当您对后面的列应用过滤器时,水平滚动条就会回到其初始位置。仅数字列会出现此问题。
我想知道是否有一种方法可以禁用基于范围的过滤器(但保留过滤器本身),或者是否有任何其他解决方法可以解决此问题。
在在这里发布这个问题之前,我已经搜索了 github issues 和 stackoveflow,因为我找不到任何人遇到这个问题。
这是一个可重现的示例以及图片 -
options(scipen = 99999) #converts the sci numbers to their regular format
library(shiny)
library(shinyjs)
library(shinyWidgets)
library(shinythemes)
library(writexl)
library(dplyr)
library(DT)
library(dplyr)
mtcars_modified <- mtcars %>% dplyr::mutate(wt_2= wt,
qsec_2 = qsec,
am_2= am,
mpg_2= mpg,
gear_2 = gear,
carb_2 = carb,
disp_2 = disp,
row_names_col= rownames(mtcars))
ui <- fluidPage(
theme = shinythemes::shinytheme("simplex"),
shinyjs::useShinyjs(), # enables javascript/jQuery enhanchments
# Create Right Side Text
navbarPage(
id = "navbar",
title= div(HTML("G<em>T</em>")),
#windowTitle = "GT",
tabPanel("Data Set Info", …Run Code Online (Sandbox Code Playgroud) 如何修复这个简单示例的下载按钮?
library(shiny)
library(shinydashboard)
library(shinyjs)
header <- dashboardHeader()
sidebar <- dashboardSidebar(shinyjs::useShinyjs(),
actionButton("start_proc", "Click to make download button appear"),
p(),
downloadButton('data_file', 'Download'))
body <- dashboardBody()
ui <- dashboardPage(header, sidebar, body)
server <- function(input, output) {
observe({
if (input$start_proc > 0) {
Sys.sleep(1)
# enable the download button
shinyjs::show("data_file")
}
})
output$data_file <- downloadHandler(
filename = function() {
paste('data-', Sys.Date(), '.csv', sep='')
},
content = function(file) {
write.csv(data.frame(x=runif(5), y=rnorm(5)), file)
}
)
# disable the downdload button on page load
shinyjs::hide("data_file")
}
shinyApp(ui, …Run Code Online (Sandbox Code Playgroud) 出于某种原因,当 bsModal 内容被observeEvent服务器端的 an 触发时,它的显示似乎出错了,图像和/或文本不会出现,并且Sweetalerts在某些情况下似乎也会导致禁用(基本上是预构建的模态) )。
我shinyjs出于这个原因进行了标记,因为该应用程序包含与其交互。除了很长的帖子和复杂的问题,我希望这bsmodal部分以及sweetalert编码shinyJS,这是 Dean Attali 的工作副本,可以帮助其他一些碰巧读到这篇文章的人。如果觉得有用,就给帖子点个赞吧。
下面是一个包含场景 1、2 和 3 的完整应用程序。场景 4 和更进一步的场景不在完整的应用程序中,因为有些场景会导致应用程序的其他部分在您添加它们的代码后立即停止工作。我建议最后尝试该应用程序,然后通读我的场景。(试图使其尽可能清楚。)
我正在bsModals向我的Shiny程序(非常大的复杂应用程序)添加新功能,并在尝试将图像合并到bsmodals. 我对问题发生的时间进行了一些研究,并在此处展示了一个包含多种场景的测试应用程序。
出于我的目的,我需要弄清楚为什么场景 7b 不起作用,即来自服务器的 bsmodal 带有图像和观察事件来激活它,
第二个主要问题是,你能以某种方式trigger = input$button1在 bsmodal 中以trigger = values$variable某种方式编码参数吗?我试过这个,但无法弄清楚。
主要问题似乎围绕着trigger =参数 insidebsmodal()与使用observeEvent()with 的行为差异toggleModal()
例如,这在 UI 方面工作正常:
即modal出现,并且sweetalert应用程序中的 出现在开始时
actionButton("show1", "Show modal 1"), …Run Code Online (Sandbox Code Playgroud) 我想制作一个Shiny App,用户可以按下一个动作按钮,然后在服务器端触发一些代码,在www文件夹中创建一个文件,然后打开/下载该文件.
假设文件是test.txt(在我的例子中,它将是各种R,Excel和exe文件,它们将从驱动器上的不同文件夹复制到www文件夹).
我的第一次尝试是使用带有onclick选项的actionbutton,如下所示
ui <- fluidPage(
actionButton("showtxt", "Show/Download File", onclick = "window.open('test.txt')")
)
server <- function(input, output, session){
observeEvent(input$showtxt,{
# Write some text
write.table(c("Test"), file = "www/test.txt")
})
}
shinyApp(ui=ui,server=server)
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,因为onclick动作是在评估observevent之前完成的.
然后我尝试在onclick选项中调用一个函数,如下所示
CreateFileAndLink <- function(){
write.table(c("Test"), file = "www/test.txt")
return("window.open('test.txt')")
}
ui <- fluidPage(
actionButton("showtxt", "Show/Download File", onclick = CreateFileAndLink())
)
server <- function(input, output, session){}
shinyApp(ui=ui,server=server)
Run Code Online (Sandbox Code Playgroud)
这有效,但有一个缺点,现在文件是在打开Shiny App时创建的,而不是在用户单击action按钮时创建文件.如果我在具有相对较大文件的应用程序中多次使用这段代码,这是非常低效的.
也许可以确保在onclick-action之前执行observevent,或者可以使用服务器端的onclick选项.
任何帮助将不胜感激!
干杯
更新:
我发现Dean Attali 的伟大的shinyjs包含了一个onclick功能,可能在这里有所帮助.我试着运行下面的代码,但它不起作用:/
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
actionButton("showtxt", "Show/Download File")
)
server <- …Run Code Online (Sandbox Code Playgroud) 我一直在努力像疯了一样要解决的显然是最基本的问题。想象一下,您有一个散点图,例如…… 10 个标记。我想这个图是在 Shiny 环境中使用 plotly 生成的。
使用event_data("plotly_click")代码可以轻松获得这些标记的坐标。
现在假设您不需要这些标记的坐标,而是通过鼠标点击生成的坐标,但恰好在不存在标记的地方(例如,因为您想在那里设置一个新标记,并且您想重新使用来自鼠标点击的信息)。
我无法使用onclick(),或其他方式获得这种行为。
任何的想法 ?
我正在尝试将easyPrint插件整合到我的闪亮小册子应用程序中.我想要的是看起来像演示的东西,但有光泽.
我试图模仿这些例子,但都没有成功.
到目前为止,这是我的R代码的代码:
library(shiny)
library(shinydashboard)
library(shinyjs)
library(htmlwidgets)
library(htmltools)
library(leaflet)
library(leaflet.extras)
library(sp)
shinyApp(
ui = fluidPage(
leafletOutput("map", height = 750)
),
server = function(input, output) {
registerPlugin <- function(map, plugin) {
map$dependencies <- c(map$dependencies, list(plugin))
map
}
easyPrintPlugin <- htmlDependency("leaflet-easyprint", "2.1.8",
src = c(href = "https://github.com/rowanwins/leaflet-easyPrint/blob/gh-pages/dist/"),
script = "index.js")
# Map
output$map <- renderLeaflet({
leaflet() %>%
addProviderTiles(providers$CartoDB.Positron) %>%
registerPlugin(easyPrintPlugin) %>%
onRender("function(el, x) {
L.easyPrint({
position: 'topleft',
sizeModes: ['A4Portrait', 'A4Landscape']
}).addTo(map);}")
})
}
)
Run Code Online (Sandbox Code Playgroud)
然而,一切都没有发生.它实际上是一个白色的屏幕.如果我删除onRender部分,传单正常.
不幸的是,我对Shiny,leaflet,.js和github相对较新,所以我很难确定导致问题的方面.
我试图将反应数据传递给updateSelectizeInput但出现以下错误:
.getReactiveEnvironment()$currentContext() 中的错误:如果没有活动的反应式上下文,则不允许进行操作。(您试图做一些只能从反应式表达式或观察者内部完成的事情。)
我的代码如下:
ui.R
library(shiny)
ui_panel <-
tabPanel("Text Input Test",
sidebarLayout(
sidebarPanel(
selectizeInput('Organisations', label = "Organisation Search",
choices = NULL, options = list(
placeholder = 'Type the organisation name', maxOptions = 10,
maxItems = 1, searchConjunction = 'and')),
tags$style(type="text/css",
".selectize-input::after{visibility:hidden;};"
),
br(),
selectInput(
inputId="selectData",
label=" ",
choices=c("Universities", "Hospitals")
),
br()
),
mainPanel(
tabsetPanel(
tabPanel("output of Organisation search
details",htmlOutput("orgsearchdetails"))
)
)
))
ui <- shinyUI(navbarPage(" ",ui_panel))
Run Code Online (Sandbox Code Playgroud)
服务器R
library(shiny)
shinyServer(
function(input, output, session) {
orgdata <- reactive({if(input$selectData=='Universities'){
orgdata <- …Run Code Online (Sandbox Code Playgroud) 我正在尝试将焦点集中在闪亮的textInput地方modalDialog。我在用shinyjs。根据shinyjs文档的指导,我想出了以下代码,但它没有达到我的预期:
library(shiny)
library(shinyjs)
jscode <- "
shinyjs.refocus = function(e_id) {
document.getElementById(e_id).focus();
}"
# Define UI for application that draws a histogram
ui <- fluidPage(
shinyjs::useShinyjs(),
shinyjs::extendShinyjs(text = jscode, functions = "refocus"),
# Application title
titlePanel("Old Faithful Geyser Data"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30),
actionButton("show", "Show Modal")
),
# Show a plot of …Run Code Online (Sandbox Code Playgroud) 我有一个简单的应用程序,只使用几个包
library(shiny)
library(tableHTML)
library(shinyWidgets)
library(shinyFeedback)
library(lubridate)
Run Code Online (Sandbox Code Playgroud)
总体而言,加载后速度很快,但在新会话窗口上需要 3-4 秒。
当我在https://developers.google.com/speed/pagespeed/insights/上分析它时, 这是主要问题
资源正在阻止您的页面的第一次绘制。考虑提供关键的 JS/CSS 内联并推迟所有非关键的 JS/样式。了解更多。
URL
Transfer Size
Potential Savings
…shared/shiny.min.css()
1.9 KiB
180 ms
…css/shinyfeedback.css()
0.6 KiB
330 ms
…css/all.min.css()
12.7 KiB
630 ms
…css/v4-shims.min.css()
4.4 KiB
480 ms
…css/toastr.min.css()
3.1 KiB
330 ms
…shinyWidgets/shinyWidgets.min.css()
1.0 KiB
330 ms
…bootstrap-switch-3.3.4/bootstrap-switch.min.css()
1.4 KiB
180 ms
…css/bootstrap.min.css()
19.6 KiB
780 ms
…css/bootstrap-accessibility.min.css()
0.8 KiB
180 ms
…__assets__/shiny-server.css()
1.3 KiB
180 ms
…shared/jquery.min.js()
30.5 KiB
1,080 ms
…shared/shiny.min.js()
25.7 KiB …Run Code Online (Sandbox Code Playgroud)