【问题标题】:Inconsistency among sessionInfo() in different platformssessionInfo()在不同平台上的不一致
【发布时间】:2021-01-26 17:19:01
【问题描述】:

在调试闪亮的应用程序时,我注意到相同的源代码在本地 (macOS Catalina 10.15.6) 和服务器 (Ubuntu 18.04.5 LTS) 上生成的 sessionInfo() 在加载的包方面略有不同。 我从应用程序中删除了所有内容,只留下了包的加载:

packages <- c("shiny", "shinythemes", "shinycssloaders", "tidyverse",
"ggthemes", "scales", "feather", "sf", "leaflet", "leaflet.extras",
"RColorBrewer")  
lapply(packages, require, character.only = TRUE)

然后在本地和服务器上打印sessionInfo()。虽然两台机器共享相同的源代码以及 R 和所有包的版本,但sessionInfo() 的结果不同。 仔细观察(下面的输出),您可能会注意到“通过命名空间加载(且未附加)的包”列表的不同之处在于服务器不加载:

  1. sourcetools_0.1.7
  2. farver_2.0.3
  3. yaml_2.2.1
  4. 另外,在服务器上,它在 crosstalk_1.0.1 之前加载 hms_0.5.3(与本地机器不同)

不确定这些差异是否容易造成问题,即从“已加载但未附加”的包中访问对象,必须以packagename::为前缀。
尽管如此,我还是很惊讶地看到了这种差异,并想知道是什么原因导致了这种行为以及这是否正常。

输出sessionInfo() 本地:

输出sessionInfo()server:

如果我加载最少数量的包,只有 Shiny,有以下区别:

  1. 服务器列出 xtable 后跟 jsonlite,而本地则相反;
  2. 服务器列出 yaml 和 rsconnect,而本地没有。

输出sessionInfo() 本地:

输出sessionInfo()server:

【问题讨论】:

  • 如果你不加载任何包,或者加载尽可能少? 究竟是什么导致了这种差异? — Unrelatedly, don’t use require, always use library.
  • 感谢@Konrad Rudolph 的提示。加载最小包(仅限 Shiny),“已加载但未附加”的列表仍然不同。编辑了问题以记录这一点。

标签: r shiny shiny-server


【解决方案1】:

‘rsconnect’ 是 Shiny Server 用于部署的包。这就解释了为什么它会自动加载到为 Shiny Server 配置的 R 实例中。1

查看它的dependencies,我们看到它导入了“yaml”包。这就解释了为什么这个包也被加载了。最后,它还导入了“jsonlite”包。并且由于“rsconnect”在 R 启动时作为默认包加载,这解释了为什么它的导入比“闪亮”包的导入更早加载,以及为什么 sessionInfo 的包顺序在本地会话和服务器会话之间不同.


1服务器上options('defaultPackages')的值应该包含‘rsconnect’。

【讨论】:

    猜你喜欢
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2018-09-14
    • 2012-03-07
    • 2012-06-12
    • 1970-01-01
    • 2015-04-07
    相关资源
    最近更新 更多