r - 在本地服务器上的应用程序中保存和加载工作区
问题描述
我有一个在本地服务器上运行的闪亮应用程序,可通过网络浏览器通过“ip-adres:port”访问。我在执行以下代码的任务计划器中安排了一个任务(路径:“C://Users//Administrator//Documents//run.R”
require(shiny)
folder_address = "C://Users//Administrator//Documents//App//app.R"
x <- system("ipconfig", intern = TRUE)
z <- x[grep("IPv4", x)]
ip <- gsub(".*? ([[:digit:]])", "\\1", z)
runApp(folder_address, launch.browser = FALSE, port = 1234, host = ip)
任务执行得很好,因为我可以通过“ip:port”访问应用程序。
在开始时,app.R
我手动加载工作区:load("C://Users//Administrator//Documents//App//.RData")
. 当我不手动加载它时,应用程序将无法识别应用程序的变量/数据框。
我的问题如下:
- 该任务计划每天早上运行。当我们只运行一次任务时,可能会发生服务器有更新并重新启动的情况。这样,应用程序不再运行。
- 在应用程序中进行编辑(即变量和数据框已更改)后的第二天运行任务时,它会再次加载工作区。
- 此工作区不包含编辑后的数据,因为工作区不会在编辑后自动保存。
- 当我手动输入触发数据编辑
save.image(".RData")
的app.R
事件(例如按钮)时,它会保存 的工作区,run.R
给我留下变量x
、z
和。ip
folder_address
如何保存应用程序的工作区,而不是 的工作区run.R
?一种解决方法是让任务每天运行并让它打开。但是,一旦任务因更新而停止,我们将不得不手动重新运行该任务。
解决方案
有几种方法可以获得您想要的结果。
持久化数据的两种最佳方式是使用数据库或将对象存储在 Amazon S3 等服务中。
如果您必须保存 R 环境,您是否可以调整您的应用程序以在每次编辑后保存,以便如果它确实被中断,它会在第二天早上在同一个位置重新开始?
或者,您是否可以重构您的应用程序以保存rds
文件(r 文件)并在应用程序启动时读取它们,并在编辑后保存每个文件(这可能比保存整个 R 环境快得多)
推荐阅读
- kernel - 现代计算机系统(x86 架构)是否具有独立于操作系统的虚拟寻址?
- python - 什么是 tensorflow.python.data.ops.dataset_ops._OptionsDataset?
- c# - 类的 foreach 函数
- spring-boot - 我正在尝试使用 Spring webflux 使用弹性搜索 API 以使我的 API 端点非阻塞
- c# - 有没有办法从另一个进程“GetCommandLineArgs”?
- python - 在生成器表达式或 for 循环中使用 python lambda
- python - 从 Python 中打开的类似文件的对象解析 Mbox?
- r - 循环遍历 R 中的数据框以更改列名和行名
- android - 使用改造客户端不允许操作错误
- google-cloud-spanner - Cloud Spanner - 读取行,但没有返回列?