РЕДАКТИРОВАТЬ: я сделал изменения, основанные на обратной связи ниже, но у меня все еще есть та же проблема с файлом не обновляется.Я обновил код, приведенный ниже, с правками, а также с функцией, которая затрудняла воспроизведение
У меня есть файл CSV, который обновляется каждые 120 секунд.Затем я делаю вычисления для этого файла и меняю цвет текста в 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) Я не могу заставить приложение автоматически обновить файл и обновить пользовательский интерфейс.
Я ранее играл с IntervalLater, нопереключаясь на реактивныйFileReader, думая, что это может быть проще.Я прокомментировал некоторые варианты, которые я пробовал.
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)
При правильном выполнении пользовательский интерфейс обновит этот цвет до красного, зеленого или любого другого значения в любое время, когда изменится среднее значение в этом конкретном столбце (оценка).