我希望observeEvent在清除输入列表时触发。
这是一个小示例应用程序:
library(shiny)
ui <- fluidPage(
selectizeInput(inputId='select',
label='Select something',
multiple=TRUE,
choices=letters[1:3])
)
server <- function(input, output){
observeEvent(input$select, {
print(input$select)
})
}
shinyApp(ui=ui, server=server)
Run Code Online (Sandbox Code Playgroud)
现在每次我选择另一个字母时observeEvent都会触发。删除字母也会触发该事件。然而,删除最后一个字母似乎不会触发任何事情。
我在这里尝试了该解决方案,但它似乎不适用于我的情况(或者我无法让它发挥作用)。
所以我的预期输出是在选择a它之后打印"a",但在删除之后a,它也会打印一些东西(无论是还是NULL)""。
我正在尝试在 plotly 中的分组条形图顶部叠加散点图。但是,在简单的条形图中,散点正确地放置在各个条的顶部,而在分组条形图中,散点不会自动调整。
这是一个演示问题的示例:
set.seed(1)
d1 <- data.frame(x=rep(c('a', 'b', 'c'), each=2),
y=rnorm(6, mean=10),
c=rep(c('q', 'r'), times=3))
d2 <- d1[d1$c=='q', ]
p1 <- plot_ly(data=d2, x=~x, y=~y, type='bar')
p2 <- add_trace(p1, data=d2, x=~x, y=~y,
type='scatter', mode='markers', marker=list(size=20))
p3 <- plot_ly(data=d1, x=~x, y=~y, color=~c, type='bar')
p4 <- add_trace(p3, data=d1, x=~x, y=~y,
type='scatter', mode='markers', marker=list(size=20))
subplot(p1, p2, p3, p4, nrows=2)
Run Code Online (Sandbox Code Playgroud)
而在右上角的面板 (p2) 中,点放置在各自的条上,而在右下角 (p4) 中,这些点不会根据颜色因子进行调整。
我可以想象通过设置x为数字变量并手动、少量调整点等来解决这个问题。但这似乎相当乏味。有没有一种简单的方法可以使情节进行调整?
(显然我们的目标不是让一个点显示每个条的顶部,而是用整个云覆盖条)
我想根据用户关闭应用程序还是应用程序崩溃来有条件地运行代码。
session$onSessionEnded无论会话如何结束,都会运行。而且我没有在里面找到一些其他函数或变量session,看起来它可能是会话如何结束的指示器。
基本上我想使用类似于下面示例应用程序中注释代码的东西。crashed如果我单击按钮会打印在哪里,但user ended如果我关闭应用程序(例如,关闭浏览器)会打印。
library(shiny)
ui <- fluidPage(actionButton('crash', 'crash me'))
server <- function(input, output, session){
observeEvent(input$crash, stop())
session$onSessionEnded(function() {
# if (crashed){
# print('crashed')
# }else{
# print('user ended')
# }
})
}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud) 我有以下格式的字符串输入:
my.strings <- c("FACT11", "FACT11:FACT20", "FACT1sometext:FACT20", "FACT1text with spaces:FACT20", "FACT14:FACT20", "FACT1textAnd1312:FACT2etc", "FACT12:FACT22:FACT31")
Run Code Online (Sandbox Code Playgroud)
我想提取所有"FACT"和FACT之后的第一个数字.所以这个例子的结果将是:
c("FACT1", "FACT1 FACT2", "FACT1 FACT2", "FACT1 FACT2", "FACT1 FACT2", "FACT1 FACT2", "FACT1 FACT2 FACT3")
Run Code Online (Sandbox Code Playgroud)
或者,结果可以是列表,其中列表的每个元素是具有1个最多3个项目的向量.
到目前为止我得到的是:
gsub("(FACT[1-3]).*?:(FACT[1-3]).*", '\\1 \\2', my.strings)
# [1] "FACT11" "FACT1 FACT2 " "FACT1 FACT2 " "FACT1 FACT2 " "FACT1 FACT2 " "FACT1 FACT2 "
# [7] "FACT1 FACT2 " "FACT1 FACT2 "
Run Code Online (Sandbox Code Playgroud)
它看起来不错,除了第一个元素的"FACT11"而不是"FACT1"(丢弃第二个"1"),并且缺少"FACT3"的最后一个元素my.strings.但添加另一组以gsub某种方式混淆了整个事情.
gsub("(FACT[1-3]).*?:(FACT[1-3]).*?:(FACT[1-3]).*?", '\\1 \\2 \\3', my.strings)
# [1] "FACT11" "FACT11:FACT20" "FACT1sometext:FACT20"
# [4] "FACT1text with spaces:FACT20" "FACT14:FACT20" …Run Code Online (Sandbox Code Playgroud) I'm trying to create a page with two rows, where the height of each row is a certain percentage of the window height (say 40 and 60%). Whereas the width of elements can be easily controlled with the use of columns, I can't seem to find a similar solution for height.
Here is a little example app:
library(shiny)
ui <- navbarPage('',
tabPanel("page 1",
fluidPage(
fluidRow(
style='height:400px',
column(7, "text"),
column(5, "other text")),
fluidRow('some more text'))
),
tabPanel("page 2"),
tabPanel("page 3")
) …Run Code Online (Sandbox Code Playgroud)