Markdown文档

时间:2015-06-25 20:43:56

标签: r shiny r-markdown

我在R Markdown文档中使用闪亮的小部件。在以前创建闪亮的应用程序时(不在Markdown上下文中),我能够创建只加载一次的大型静态数据集全局变量。我现在正尝试在Markdown文档中做类似的事情。

我在CSV文件中有超过5000个项目的列表。我将每天随机拉一个,然后在程序中使用它来生成一些信息和图表。我希望每个人的随机项目每天都相同,这就是我遇到的问题。我知道如果它只是每个会话的一个新的随机项目,如何让它工作,但我不知道如何使每个会话相同。

---
#title: "Daily Random Thing"
#author: "Tyler Beason"
#date: "Wednesday, June 24, 2015"
output: html_document
runtime: shiny
---
```{r,echo=FALSE}
symbolList <- read.csv('symbolList.csv',stringsAsFactors=FALSE, header=TRUE) #this is what I want to be global

checkFun <- function()
  {
    Sys.time()
  }
valueFun <- function()
  {
    Sys.time()
  }
today <- reactivePoll(5000,NULL, checkFun, valueFun) #only set to 5000ms for testing FYI
valueFun2 <- function()
  {
    sample(1:nrow(symbolList),1)
  }
rand <- reactivePoll(5000,NULL,checkFun,valueFun2)

todayThing <- reactive({symbolList[rand(),1]})
renderPrint({todayThing()})
#...go on to do more things with todayThing
```
#Title and such

如何使程序工作,以便每天访问一次symbolList并拉出一个新的随机项,重新生成页面的其余部分(我可以做),然后保持静态(和完全相同)用户直到第二天?我知道这很可能都是服务器端完成的,但我不能把它拼凑在一起。

希望这是有道理的。

1 个答案:

答案 0 :(得分:0)

你可以做这样的事情,使用Sys.Date()set.seed使其每天都一样

set.seed(floor(as.numeric(Sys.Date())))
num_rows <- 5000
n <- sample(num_rows, 1)

然后从你的.csv获取第n项。

编辑:定时更新

library(shiny)
shinyApp(
    shinyUI(
        fluidPage(
            textOutput("stuff")
        )
    ),
    shinyServer(function(input, output, session) {  
        values <- reactiveValues()
        values$n <- 0
        observe({
            ## Something like: difftime(Sys.Date()+1, Sys.Date(), units="sec")*1000
            ## to update everyday
            invalidateLater(1000, session)  # update n every second
            isolate( values$n <- values$n + 1 )
        })
        output$stuff <- renderPrint({
            sprintf("Stuff is %s", values$n)
        })
    })
)