你可以将CSS样式应用于单个selectInput菜单吗?
我在其他文章中找到了处理样式selectInput菜单的代码,但结果影响了应用程序中的所有内容.我想操纵单个菜单.我也在考虑根据服务器中发生的条件向个别元素添加样式,但那是另一个单独的问题.
测试应用代码:
library(shiny)
library(shinydashboard)
library(shinyjs)
ui <-
fluidPage(
hr("how do we get the change the style elements of a single select input?)
tags$style(type='text/css', .selectize-input { font-size: 8px; line-height: 8px;}
.selectize-dropdown { font-size: 8px; line-height: 8px; }"),
selectInput("choice", "choices", c("A", "B", "C")),
selectInput("choice2", "choices", c("D", "E", "F"))
)
server < - function(input, output, session) { }
})
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
这种方法直接来自Dean Attali在这里的答案:例子,类似的问题被问为最终评论,但没有答案,所以我决定就此问题发表一个问题,因为我有同样的问题.
对于像textInput字段这样的其他元素,我通常这样做的方式是:
tags$style(type='text/css', "#NAMEELEMENT {background-color: green; height: 40px; border-color: #bfbfbf; width: 520px; position: relative;left: …Run Code Online (Sandbox Code Playgroud) 如何调整数据表操作,以便除了sum几个列的类别之外,它还会同时计算其他函数,例如count mean和(.N)并自动创建列名:"sum c1","sum c2"," sum c4","表示c1","表示c2","表示c4",最好也是1列"计数"?
我的旧解决方案是写出来
mean col1 = ....
mean col2 = ....
Run Code Online (Sandbox Code Playgroud)
等等,在data.table命令中
哪个有效,但我觉得非常低效,如果在新的应用程序版本中,计算依赖于用户在R Shiny应用程序中的选择来计算哪些列,它将不再用于预编码.
我已经通过一堆帖子和博客文章阅读了我的方式,但还没有弄清楚如何最好地做到这一点.我读到,在某些情况下,根据您使用的方法(.sdcols,get,lapply和/或=),大型数据表上的操作会变得非常慢.因此我添加了一个"相当大"的虚拟数据集
我的实际数据大约是100k行乘100列和1-100组.
library(data.table)
n = 100000
dt = data.table(index=1:100000,
category = sample(letters[1:25], n, replace = T),
c1=rnorm(n,10000),
c2=rnorm(n,1000),
c3=rnorm(n,100),
c4 = rnorm(n,10)
)
# add more columns to test for big data tables
lapply(c(paste('c', 5:100, sep ='')),
function(addcol) dt[[addcol]] <<- rnorm(n,1000) )
# Simulate columns selected by shiny app user
Colchoice <- c("c1", "c4")
FunChoice <- c(".N", …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) 我正在尝试使用相对较新的shinyAlert软件包,以查看它是否比该sweetalert软件包提供更好的结果,但我无法弄清楚如何获得此软件包:
Myvar <- shinyalert input text
Run Code Online (Sandbox Code Playgroud)
从这个最小的例子。
library(shiny)
library(shinyjs)
library(shinyalert)
ui <- fluidPage(
shinyjs::useShinyjs(),
useShinyalert(),
actionButton("run", "Run", class = "btn-success")
)
server <- function(input, output, session) {
shinyEnv <- environment()
observeEvent(input$run, {
shinyalert('hello', type='input')
})
}
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助。
如何获得无功输出元素列表?
没有问题的是: observe(print(reactiveValuesToList(input)) )
什么不起作用我不明白的原因是: observe( print(reactiveValuesToList(output)) )
对于一个大型的复杂应用程序,我正在编写一个智能代码,在A部分中保存所有反应值和所有输入作为rds文件,saveRDS
我reactivevalues的构建方式是这样的;values <- reactivevalues()
B部分使用readRDS加载所有这些值.反应values$x被重新分配,输入$ x更新,例如updateTextinput(session, inputID, value),由于一些奇怪的原因也适用于selectInput元素,但这与我面临的问题无关.
我的应用程序还包含renderUI元素和renderText元素
要更新这些元素,我需要设置选项:
outputOptions(output, x, suspendWhenHidden = FALSE)}
Run Code Online (Sandbox Code Playgroud)
其中x是元素的名称.但是我有很多这些元素,并希望将此suspendWhenHidden选项的设置应用于列表.但是,尝试获取列表outputs不起作用:
observe( print(reactiveValuesToList(output)) )
如何获取所有渲染元素/所有输出元素的列表?
一个演示应用程序,用于显示它如何用于输入,但不适用于输出元素
library(shiny)
rm(list = ls(), envir = globalenv()) ## to prevent cross over from old runs
ui <- dashboardPage(
dashboardHeader(title = "Dummy App"),
dashboardSidebar(
sidebarMenu(id = "tabs",
menuItem("HOME", tabName = …Run Code Online (Sandbox Code Playgroud) 每次由 R 在 Shiny 中(或仅在 R 中)创建一个 plotly 对象时,都会完全重新创建小部件。对于小数据集,这不是问题,但我正在处理包含数千个散点的图,因此在我的 Shinyapp 中重新创建图需要 10-20 秒。
我正在寻找一种通过 javascript 解决方案更新数据的方法,该解决方案不会触发小部件重建,而只是替换它的数据。
这是一个带有 2 个小数据集的虚拟应用程序,应用程序可以在这些数据集之间进行切换。在虚拟应用程序中,它通过重新创建小部件来实现。由于数据点有限,这里相当快,但对于海量数据集并不理想。
如果有人知道如何做到这一点,这将是我的应用程序的重大改进。
澄清: 这里的答案是这样的:在此处输入链接描述对我不起作用。关键是,在我的应用程序中,在构建绘图后数据已更改多次,因此我无法预加载数据框列表。
我有一种感觉,解决方案必须是一个 javascript 解决方案,可以获取数据以覆盖当前绘制的数据,但不确定如何或是否可以做到这一点。
library("shiny")
library("plotly")
ui <- fluidPage(
selectInput("dataset", "Choose a dataset:", choices = c("rock", "mtcars")),
plotlyOutput("Plot1")
)
server <- function(input, output, session) {
dataSource <- reactive({switch(input$dataset,"rock" = rock,"mtcars" = mtcars)})
output$Plot1 <- renderPlotly({plot_ly(data = dataSource(), x = dataSource()[,1],
y =dataSource()[,2], mode = 'markers', type = 'scatter')})
}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud) 在上一个问题的帮助下,我现在可以设置所选行的样式(旨在让用户选择要从进一步分析中排除的行),但我发现在执行排除行的功能后对数据表进行排序(使它们变灰)并添加一个不同的图标,将图标保留在正确的行中,但将错误的行灰显。
排序后:(在正确的行有十字,但不会变灰。
library(shiny)
library(DT)
mtcars <- as.data.table(mtcars[1:15, )
ui <- fluidPage(
# actionButton('SubmitRemoval', 'Exclude selected rows'),
# actionButton('UndoRemoval', 'Include full data'),
# br(),
DTOutput('metadataTable')
)
server <- function(input, output,session) {
values <- reactiveValues()
rowCallbackMeta = function(rows){
c(
"function(row, data, num, index){",
sprintf(" var rows = [%s];", paste0(rows-1, collapse = ",")),
" if(rows.indexOf(num) > -1){",
" for(var i=0; i<data.length; i++){",
" $('td:eq('+i+')', row)",
" .css({'color': 'rgb(211,211,211)', 'font-style': 'italic'});",
" }",
" }",
" $('td:eq(3)', …Run Code Online (Sandbox Code Playgroud) 我试图想办法让一个actionButton来改变颜色(也可能是其他样式元素.)目标是非常通用的,我将在复杂的shineDashboard应用程序中使用它来进行许多按钮响应.简单地说:如果单击一个按钮,或者一个特定元素(即inputlider)发生了与按钮相关联的更改,该按钮应该会改变颜色.
我通常在Shiny中编码我的按钮,如下所示:
actionButton(inputId= "RunFullModel", label =icon("tree-deciduous", lib = "glyphicon"),
style = "color: white;
background-color: #35e51d;
position: relative;
left: 3%;
height: 35px;
width: 35px;
text-align:center;
text-indent: -2px;
border-radius: 6px;
border-width: 2px")),
Run Code Online (Sandbox Code Playgroud)
我一直在浏览我的屁股,但没有运气的东西有效.我一直在看@Dean Attali的shinyjs来做这件事,但我只能让它改变印刷文本的背景,如下例所示.使用ToggleClass或AddClass的部分似乎不适用于actionButton("x","y").我也尝试使用闪亮包本身的updateActionButton,但这似乎不允许将style ="..."包含在命令中.
library(shiny)
library(shinyjs)
library(shinyBs)
if (interactive()) {
shinyApp(
ui = fluidPage(
useShinyjs(),
inlineCSS(list(.red = "background: red")),
inlineCSS(list(.blue = "style = 'background-color: blue'")),
actionButton("checkbox", "Make it red"),
bsButton("checkbox2", "Make me blue"),
p(id = "element", "Watch what happens to me")
),
server = function(input, output) {
observe({
toggleClass(id = "element", …Run Code Online (Sandbox Code Playgroud) 我知道这与以前提出的问题非常接近,但是在彻底研究这些示例之后,我还没有找到针对我的特定问题的解决方案。
我有一个闪亮的应用程序,使用具有这种结构的闪亮仪表板(*1)。我可以这样制作下一页或上一页按钮:
next_btn <- actionButton( inputId ="Next1",
label = icon("arrow-right"))
Run Code Online (Sandbox Code Playgroud)
与观察者:
observeEvent(input$Next1, {
updateTabItems(session, "tabs", "NAME")
})
Run Code Online (Sandbox Code Playgroud)
其中 NAME 是选项卡项 ID。这个版本比我发现的使用 switch 和/或简单地导航到 ShinyDashboard 中的特定侧边栏菜单项的示例更简单?
但是,这只能通过特定按钮从 pagename1 切换到 pagename2。
然而,我的应用程序中有 10-20 个 tabItems : ** <<- 我的问题的原因**
提到的方法需要我为每个页面编写一个 actionbutton(next1, ... ac but next 2 , next 3 etc. 1 ,并且为每个页面编写一个单独的观察者。
我想做的是:
1 个名为“NEXTPAGE”的通用操作按钮,带有执行 updateTabItems(session, tabs, "current page +1" 的观察者)
以任何我迷路的方式到当前页面+1。我可以想象创建一个所有选项卡名称的列表参数,在该列表中找到当前选项卡名称,抓住它的位置,例如向上移动一个位置(上一个)或向下移动一个位置(下一个)。但是,除了一些非常费力的手动输入字符串列表之外,我不知道如何获取应用程序中存在的所有 tabItems 的列表变量。
*1 应用程序结构:
library(shiny)
library(shinydashboard)
### create general button here like:
### write a function that looks at …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法将按钮添加到 r Shiny 中的数据表:每次单击时向数据表添加一个空列(以及首先制作表格的数据框,用户可以用数字或文本值 并设置自己的列名来描述条目值的类型。
例如,将实验室笔记记录手动添加到闪亮的应用程序中已经存在的仪器数据中
我在问,如果一个比我有更好线索的更熟练的人知道如何做到这一点。我已经阅读了一堆页面,但我发现的示例充其量提供了 1 个具有固定名称的固定空列
包中的虚拟表:library(DT)
ui <- basicPage(
h2("The mtcars data"),
DT::dataTableOutput("mytable")
)
server <- function(input, output) {
output$mytable = DT::renderDataTable({
mtcars
})
}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud) r ×10
shiny ×9
button ×2
datatable ×2
shinyjs ×2
click ×1
colors ×1
columnheader ×1
css ×1
data.table ×1
datacolumn ×1
dt ×1
javascript ×1
output ×1
plotly ×1
reactive ×1
select ×1
styles ×1
tabitem ×1
triggers ×1