r - 一旦CSV在R中的间隔更新,我如何刷新CSV中的值?
问题描述
编辑:我已经根据以下反馈进行了更改,但我仍然遇到文件不刷新的相同问题。我已经用编辑以及难以重现的功能更新了下面的代码
我有一个每 120 秒更新一次的 CSV 文件。然后我对该文件进行计算并更改 ui.r 中文本的颜色。
我真的在语法上苦苦挣扎,虽然我可以在启动应用程序、进行更改和重新启动应用程序时让一切正常工作,但我无法让我的应用程序自动更新。
下面的代码在控制台中一起执行时可以正常工作。所以我有信心我可以读取文件,进行计算并分配一个值。
source("BusinessLogic.R") #This contains getColor()
my_df <- read.csv("test.csv")
my_value <- mean(my_df$score)
ui_value <- getColor(my_value)
ui_value
>[1] "yellow"
但是在我的完整代码中,有两个问题:1)似乎我的应用程序正在从内存中读取文件,而不是每次启动应用程序时再次实际检查它
2) 我无法让应用程序自动刷新文件并更新 UI。
我以前玩过 IntervalLater 但切换到 reactiveFileReader 认为它可能更容易。我已经注释掉了我一直在尝试的一些变化。
library(shiny)
#source("BusinessLogic.R") #Contains function getColor()
#my_df <- read.csv("test.csv")
ui <- htmlTemplate(
text_ = '
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="application/shiny-singletons"></script>
<script type="application/html-
dependencies">json2[2014.02.04];jquery[1.12.4];shiny[1.2.0]</script>
</head>
<body>
<p style="color:{{ui_value}}">color</p>
</body>
</html>'
)
server <- function(input, output, session) {
getColor <- function(x) {
if (x > 80) {
result <- "green"
}
else if (x > 50) {
result <- "yellow"
}
else {
result <- "red"
}
return(result)
}
my_df <- reactiveFileReader(1000, session, 'test.csv', read.csv)
#my_df <- read.csv("test.csv")
observe({
invalidateLater(1000, session)
my_value <- mean(my_df()$score)
output$ui_value <- getColor(my_value)
})
}
shinyApp(ui, server)
正确执行时,UI 会将此颜色更新为红绿色或任何时候该特定列(分数)中的平均值发生变化。
解决方案
1)似乎我的应用程序正在从内存中读取文件,而不是每次启动应用程序时都再次实际检查它
将文件上传到反应变量后,您没有正确调用文件my_df
反而:
my_df <- reactiveFileReader(1000, session, 'test.csv', read.csv)
my_value <- mean(my_df()$score)
2) 我无法让应用程序自动刷新文件并更新 UI。
您只运行一次服务器代码,因为您没有使用任何反应式环境来重新分析结果。
observe({
invalidateLater(1000, session)
my_value <- mean(my_df()$score)
output$ui_value <- getColor(my_value)
})
使用观察函数invalidateLater
允许我们以与文件重新上传相同的速率重新运行反应式表达式。
注意:我无法测试此代码,因为它不可重现。
推荐阅读
- angular - 查找 Angular 框架生成的 CSS
- asynchronous - 在 Flutter 中显示应用程序版本、操作系统版本和型号
- excel-formula - Excel 中 SUMPRODUCT() 中的数组常量
- c - 哪个更好:单个 BAO 或多个 BAO
- r - Error in calculating standard error: (list) object cannot be coerced to type 'double'
- reporting-services - 基于参数选择的 SSRS 报表动态分页
- python - 我们可以在列表中找到素数吗?
- amazon-web-services - 除非执行 /index,否则 aws 静态网站 SSL 将无法工作
- python - 编写一个 evenNumOfOdds (L) 函数,它接受正整数 L 的列表,如果 L 中有偶数个奇数,则返回 True
- c - 要求用户输入 ... 使用 Scanf