(自从我得到0个答案后,来自闪亮讨论Google小组的交叉帖子).
我不太了解R的消息vs cat vs print vs等,但我想知道是否有可能捕获消息以及他们是谁在一个闪亮的应用程序?
示例:以下应用程序可以捕获cat语句(以及print语句)但不捕获消息语句
runApp(shinyApp(
ui = fluidPage(
textOutput("test")
),
server = function(input,output, session) {
output$test <- renderPrint({
cat("test cat")
message("test message")
})
}
))
Run Code Online (Sandbox Code Playgroud)
链接到原始问题:https://groups.google.com/forum/#!topic/shiny-discuss/UCacIquFJQY
谢谢
我正在开发一个闪亮的应用程序,因为我想使用该功能的自动化测试和文档,我开始在一个包中开发接口(这里推荐).
我在RStudio中开发这个闪亮的应用程序,我有一个server.R文件,我可以点击RStudio内的运行应用程序按钮,一切正常.我将我的包提交到github存储库,从这一点开始我想在我的R闪亮服务器上使用devtools和安装它install_github.
现在我想知道如何在服务器中启动我的应用程序.我天真地想着安装软件包并指向server.R文件,但这在某种程度上无法正常工作.不确定问题出在哪里.
我的第二次尝试是创建一个文件app.R,在闪亮的服务器可访问的文件夹中调用,在这个文件中,我基本上加载我的包,闪亮和其他所需的包,但它因为缺少变量而以某种方式抱怨...
有人可以给我一个建议吗?我也很乐意回答任何问题,因为我不确定如何正确地提出这个问题.提前致谢.
编辑部署到闪亮的服务器
由于Colin D在评论中询问如何在闪亮的服务器上部署这些软件包,我想演示如何做到这一点.
首先,我使用以下命令通过root命令行直接在光亮的服务器上安装我的软件包.
su - -c "R -e \"devtools::install_github('user/shinypackage')\""
Run Code Online (Sandbox Code Playgroud)
下一步是更改包文件夹的所有者
chown -R shiny:shiny /usr/local/lib/R/site-library/shinypackage/
Run Code Online (Sandbox Code Playgroud)
然后我重新启动闪亮的服务器,因为这有时会出现缓存等问题.
systemctl restart shiny-server
Run Code Online (Sandbox Code Playgroud)
这些是我更新闪亮应用时的步骤.我通常再次以root为单位执行此操作
su - -c "R -e \"devtools::install_github('user/shinypackage')\"" & chown -R shiny:shiny /usr/local/lib/R/site-library/shinypackage/ & systemctl restart shiny-server
Run Code Online (Sandbox Code Playgroud)
我们仍然需要做的一件事是在shiny-server.conf文件中设置目录.我刚刚添加了包路径+ 保存ui.R和server.R保存的应用程序目录.
location /shinypackage {
app_dir /usr/local/lib/R/site-library/shinypackage/application;
log_dir /var/log/shiny-server;
}
Run Code Online (Sandbox Code Playgroud)
然后我必须使用重新启动服务器systemctl restart shiny-server …
假设我有一个闪亮的应用程序,其功能可能需要很长时间才能运行.是否有可能有一个"停止"按钮告诉R停止长时间运行的呼叫,而不必停止应用程序?
我的意思是:
analyze <- function() {
lapply(1:5, function(x) { cat(x); Sys.sleep(1) })
}
runApp(shinyApp(
ui = fluidPage(
actionButton("analyze", "Analyze", class = "btn-primary"),
actionButton("stop", "Stop")
),
server = function(input, output, session) {
observeEvent(input$analyze, {
analyze()
})
observeEvent(input$stop, {
# stop the slow analyze() function
})
}
))
Run Code Online (Sandbox Code Playgroud)
编辑:发光讨论的x-post
我从数据库初始加载数据server.R需要几秒钟.在此之前,显示的页面会失真(选择框中的数据错误,框的奇怪位置,见下文).

我希望在数据完全加载之前显示不同的页面(或至少在我的第一个显示的选项卡中显示不同的内容).
我想过做某种conditionalPanel使用基于专用的全局变量(initial_loading_done)的条件,但无论我试着放置conditionalPanel没有奏效.
这是我的UI.R的结构:
shinyUI(
dashboardPage(
dashboardHeader(title = "Title"),
dashboardSidebar(
sidebarMenu(
menuItem("Tab1", tabName = "Tab1",icon = icon("dashboard")),
menuItem("Tab2", tabName = "Tab2", icon = icon("bar-chart-o"))
)
),
dashboardBody(
includeCSS("custom_css.css"),
tabItems(
tabItem(tabName = "Tab1",
fluidRow(<content>),
mainPanel(
fluidRow(<content>)
)
),
tabItem(tabName = "Tab2",
fluidRow(<content>),
mainPanel(
dataTableOutput('my_data_table')
)
)
)
)
)
)
Run Code Online (Sandbox Code Playgroud) 我正在使用webkitdirectory创建一个允许上传整个文件夹的输入(而不是选择单个文件).我知道这是非标准的,不应该用于生产.
我正在上传一个特定类型的文件夹,其中有一个不需要的非常大的文件,以及许多其他小文件.上传需要很长时间,因为有一个大文件,但巧合的是,这也是我在服务器端实际上不需要的一个文件,我想知道是否有任何方法在上传之前过滤掉它?
这似乎是一个非常明显的问题,但我还没有找到关于这个主题的任何内容.
如何刷新闪亮的应用程序(相当于按下F5,或单击RStudio中的"重新加载应用程序"按钮)?
ui.R
shinyUI(pageWithSidebar(
headerPanel("Example"),
sidebarPanel(
actionButton("goButton", "Refresh")
),
mainPanel(
h4("I would really like to refresh this please.")
)
))
Run Code Online (Sandbox Code Playgroud)
server.R
shinyServer(function(input, output,session) {
observe({
if(input$goButton==0) return(NULL)
isolate({
#
# I would like to refresh my session here with some sort of
# function like session(refresh)...
})
})
})
Run Code Online (Sandbox Code Playgroud)
我不认为我想使用stopApp() - 我只想刷新它,使其处于加载时的状态.
UPDATE
在RStudio网站上,它显示了如何从服务器管理用户的会话.特别,
$ sudo rstudio-server suspend-session <pid>
Run Code Online (Sandbox Code Playgroud)
应用程序中是否存在与用户相同的功能?在会话信息的文档中(这里),它说有一个onSessionEnded(回调)函数.如果有session.End()函数执行上面的suspend-session函数会很好!
我希望在我的闪亮应用程序中有一个用户可以点击或选择某些区域的情节,所以我使用的是click和brush参数plotOutput.我的问题是,当启动画笔时,也会调用单击处理程序.我想知道什么时候点击,我想知道什么时候刷子,但如果点击是刷子的一部分,那么我想忽略它.
示例:在以下应用程序中,如果您只是刷(单击某处并拖动鼠标),则会收到"单击"消息以及"刷子"消息.我希望在这种情况下只获得"刷"消息.
library(shiny)
library(ggplot2)
runApp(shinyApp(
ui = fluidPage(
plotOutput("plot", click = "click", brush = "brush")
),
server = function(input, output, session) {
output$plot <- renderPlot({
ggplot(mtcars, aes(wt, mpg)) + geom_point()
})
observeEvent(input$click, {
cat("clicked\n")
})
observeEvent(input$brush, {
cat("brushed\n")
})
}
))
Run Code Online (Sandbox Code Playgroud) 我有一个R6类,我想S3为它添加一个方法.我发现的文档简要提到,为了使用你必须拥有的S3调度,我找不到应该怎么做的例子.R6class = TRUE
我确实在经验上看到只是简单地在表单中编写S3方法s3generic.r6class,但我想知道这是否确实以正确的方式编写S3方法R6.
例如,假设我有一个R6增强a 的类list
library(R6)
R6list <- R6Class(
"R6list",
public = list(
orig = NULL,
initialize = function(x) {
self$orig <- x
}
)
)
Run Code Online (Sandbox Code Playgroud)
问题1
当然,我想提供一种获取基础列表的方法,所以我想添加一个as.list方法.是否标准在类中添加S3泛型和as.list公共函数?我的直观答案是添加两者.
R6list <- R6Class(
"R6list",
public = list(
orig = NULL,
initialize = function(x) {
self$orig <- x
},
as.list = function() {
self$orig
}
)
)
as.list.R6list <- function(x, ...) …Run Code Online (Sandbox Code Playgroud) 几个小时前我才刚开始研究pandoc所以还有很多我不知道的东西.我知道如果我修改生成的docx并添加页脚和页码,那么我可以将其用作模板,但我想知道是否可以在没有模板的情况下使用pandox并生成页脚和页码?
我以为这是可能的
pandoc <args> --page_numbers --footer="Created by John Smith"
Run Code Online (Sandbox Code Playgroud)
或者只有模板才能使用?
我的闪亮应用程序生成一些用户可以下载的文件.为此,我已将下载按钮放在ui中.但是,当页面启动时,在完成任何计算之前,没有任何内容可供下载.我想阻止用户下载空白页面.
为此,我想在输出准备好之前禁用downloadButton.但我不知道该怎么做.我已经找到了禁用ActionButton的方法(比如ShinyBS包和其他JS代码),但是没有用于downloadButton的方法.
现在,如果输出没有准备好,我使用validate()来抛出错误.但是,当单击downloadButton时,会打开一个新的空网页,其中包含一条很难看的错误信息.
让我知道你的想法.
这是我的ui代码
downloadButton('download', 'Download Lasso component matrix')),
Run Code Online (Sandbox Code Playgroud)
这是我的服务器代码:
output$download_matrix <- downloadHandler(
filename = function() {
validate(
need(is.null(outputData())==FALSE, "No data to download yet")
)
paste('combined_model_matrix', '.txt', sep='') },
content = function(file) {
write.csv(outputData()$combinedAdjMtr, file)
})
Run Code Online (Sandbox Code Playgroud)