我有一个闪亮的仪表盘,它根据单个CSV文件中显示的数据显示图表和方框。 我已经安排了每1小时更新CSV的时间。但是,除非手动刷新或再次运行,否则dashboard不会更新(完全不理想)。
我尝试过invalidatelater(),但它似乎不起作用。
这是一个小片段。
server<-function(input,output,session){
`observe({
invalidateLater(60000,session)
isolate(Day<-read.csv("C:/Users/user1/Desktop/dashboardstuff/querycode.csv"))
})
querycode是CSV的名称。 该csv每60分钟更新一次,我也希望我的仪表板也进行更新。 不知道这是否是正确的方法。任何帮助将不胜感激。
只需输入我的代码,
ui<-dashboardPage(
dashboardHeader(title = "METRIC DASHBOARD"),
dashboardSidebar(
useShinyjs(),
sidebarMenu(
id='tabs',
menuItem("NA DAY COUNT", tabName = "tab1") ,
menuItem("EU DAY COUNT", tabName = "tab2"),
menuItem("JA DAY COUNT", tabName = "tab3"),
menuItem("CUMULATIVE DAY COUNT", tabName = "tab4") ,
menuItem("EU DEFECTS SUBMITTED", tabName = "tab5"),
menuItem("NA DEFECTS SUBMITTED", tabName = "tab6") ,
menuItem("JA DEFECTS SUBMITTED", tabName = "tab7") ,
menuItem("Total DEFECTS SUBMITTED", tabName = "tab8"),
menuItem("HOURLY PRODUCTIVITY", tabName = "tab9") ,
menuItem("HOURLY DEFECTS SUBMITTED", tabName = "tab10")
)),
dashboardBody(
tabItems(
tabItem(
tabName = 'tab1',
highchartOutput("h1",height = 700)
),
tabItem(
tabName = 'tab2',
highchartOutput("h2",height = 700)
),
tabItem(
tabName = 'tab3',
highchartOutput("h3",height = 700)
),
tabItem(
tabName = 'tab4',
highchartOutput("h4",height = 700)
),
tabItem(
tabName = 'tab5',
highchartOutput("h5",height = 700)
),
tabItem(
tabName = 'tab6',
highchartOutput("h6",height = 700)
),
tabItem(
tabName = 'tab7',
highchartOutput("h7",height = 700)
),
tabItem(
tabName = 'tab8',
highchartOutput("h8",height = 700)
))
)
)
tabnames = c('tab1', 'tab2','tab3','tab4','tab5','tab6','tab7','tab8')
这是服务器部分,
服务器<-功能(输入,输出,会话){
observe({
invalidateLater(60000,session)
isolate(Day<-read.csv("C:/Users/user1/Desktop/dashboardstuff/querycode.csv"))
})
# Day <- reactiveFileReader(60000*5,session,'C:/Users/pchintap/Desktop/dashboardstuff/querycode.csv',read.csv,header=TRUE)
# Day <- read.csv("C:/Users/user1/Desktop/dashboardstuff/querycode.csv")
# })
strptime(Day$review_started_timestamp,"%Y-%m-%d %H:%M:%S")+5*3600+30*60->Day$review_started_timestamp
substr(Day$review_started_timestamp,6,7)->Day$Month
substr(Day$review_started_timestamp,1,10)->Day$date
strftime(Day$date,format = "%V")->Day$Week
Day$Week<-as.factor(Day$Week)
substr(Day$review_started_timestamp,12,13)->Day$starthour
merge(Day,Associate.data%>%select("username","Q4.Manager","Project","Level","Q4.Shift","Region"),by.x = "username",all.x = TRUE)->Day
Day[complete.cases(Day),]->Day
output$h1<-renderHighchart({
hourNA<-Day
其余代码只是按照我想要的方式进行数据操作。 但是,这就是我试图读取csv“日”的方式。 我已经尝试了评论中提到的方法。但这似乎不起作用。
答案 0 :(得分:0)
如果您发布了一个正常工作的应用程序代码(虽然是最少的),那将真正有帮助,以便我们获取您的确切代码,查看不起作用的代码,并应用正确的修改。
仅按照我在短代码中看到的内容进行操作,就可以100%看到为什么您的操作不起作用:Day
被分配给观察者内部的新CSV文件,但是它不会将该值保留在观察范围之外。这是由于R中的基本作用域规则所致,就像您在一个函数中定义一个变量一样,另一个不相关的函数也无法访问该变量。但是这段代码确实每60秒运行一次(您可以通过在内部放置print
语句并每分钟打印一次来确认这一点,或者甚至可以执行诸如print的操作数据集的行数,并查看确实确实每分钟都会读取新的数据集。
在没有看到您实际的应用程序的情况下,我很难说出Day
的初始定义以及应如何使用,但是人们可以通过三种常见的方式来实现您在这里要做的事情:
看来,此观察者的全部原因是仅读取文件并将其分配给变量,因此我敢保证使用reactive()
更合适。意思是这样的:
Day <- reactive({
invalidateLater(60000, session)
read.csv("C:/Users/user1/Desktop/dashboardstuff/querycode.csv")
})
然后,当您要使用此变量时,调用Day()
类似地,您可以使用reactiveVal
或reactiveValues
代替reactive()
函数。我不会讲解使用reactive()
和reactiveValues
之间的区别(这不在范围之内,而整个主题是here's a question+answer for that),但这是一个示例:
rv <- reactiveValues()
observe({
invalidateLater(60000, session)
rv$Day <- read.csv("C:/Users/user1/Desktop/dashboardstuff/querycode.csv")
})
并使用rv$Day
访问此变量
由于这是许多人的常见问题,因此有一个特殊功能:reactiveFileReader()
。您可以像这样使用它:
Day <- reactiveFileReader(60000, session, "C:/Users/user1/Desktop/dashboardstuff/querycode.csv", read.csv)
并使用Day()
进行访问