将本地数据从一个脚本传递到另一个

时间:2018-07-02 21:33:16

标签: r shiny connection

了解一些背景知识,以便您了解问题/环境:

我正在构建一个复杂的闪亮应用程序。第一步是接受用户输入:它接受可能的选择列表,并根据UI过滤掉设置的大数据。从那里开始,这个本地过滤的数据集需要用它调用一个函数来进行一堆计算,然后返回结果。

这就是我想做的事情:我想在单独的脚本中拥有该应用程序和此功能,因为该功能本身就是超过300行代码。当前它们在单独的脚本中,但是它们尚未链接在一起。

reboot.scss的光泽结构是:

server

我的函数的结构是:

output$plot <- renderPlot({
  # Filter based on UI to result in a data set called d2
  # Here I would like to call my function

现在,如果我进入data <- fread("local_path.csv") my_function <- function(){ # A ton of calculations using data set loaded above } # Call to function my_function() 并调用server,脚本将与我在脚本中加载的数据一起运行。

我的问题是如何将数据发送到其他脚本?我可以轻松地运行源代码行,然后在闪亮的应用程序中调用该函数,但是如何将过滤后的数据发送到其他脚本?

要记住的另一件事是,在完成这些计算之后,它会生成一个图,如果用户现在想要更改其输入,则应用会允许他们进行输入,然后它会重新过滤数据并不得不再次调用该函数以重新计算一切,以便能够绘制新图。

我知道一个解决方案(虽然不是一个好的解决方案)将是在过滤数据后输出一个csv,然后在我的另一个脚本中设置该文件路径,但是,因为这是一个巨大的数据块(即使进行过滤)这将极大地减慢该过程。

任何想法和帮助都值得赞赏!谢谢!

1 个答案:

答案 0 :(得分:0)

如果我的理解正确,当您说“如何将数据发送到另一个脚本”时,是指定义该功能的脚本“其他”-当前以data <- fread(...)开头的脚本。

答案是您没有将数据从server.R发送到该脚本;并且也不要从该脚本中调用该函数,只需在该脚本中定义它即可。您应该:

  • 从定义函数的脚本中删除对函数my_function()的调用
  • 在函数中添加一个d2参数
  • server.R的顶部(即,在shinyServer(function(input, output))之前,调用source(my_function_definition.R),这样就可以一次读取原始完整数据集,并且一次定义该函数
  • d2定义为server.R中的反应对象(我想您已经在这样做)d2 <- reactive({definition code here; return(d2)})
  • 当需要在my_function(d2())文件中时,调用server.R,将结果传递给需要这些结果的地方以产生一些输出。

函数应该接受输入并返回输出。