不同平台sessionInfo()不一致
Inconsistency among sessionInfo() in different platforms
在调试闪亮的应用程序时,我注意到相同的源代码在本地 (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()
的结果不同。
仔细观察(下面的输出),您可能会注意到“通过命名空间加载的包(而不是附加的)”列表的不同之处在于服务器未加载:
- sourcetools_0.1.7
- farver_2.0.3
- yaml_2.2.1
- 此外,在服务器上,它在 crosstalk_1.0.1 之前加载 hms_0.5.3(与本地机器不同)
不确定这些差异是否会很容易导致从“已加载但未附加”包中访问对象的问题,这些包必须以 packagename::
.
作为前缀
尽管如此,我还是很惊讶地看到这些差异,想知道是什么导致了这种行为,这是否正常。
输出sessionInfo()
本地:
输出sessionInfo()
服务器:
如果我加载最小数量的包,仅 Shiny,则存在以下差异:
- 服务器列出 xtable 后跟 jsonlite,而在本地则相反;
- 服务器列出了 yaml 和 rsconnect,而在本地却没有。
输出sessionInfo()
本地:
输出sessionInfo()
服务器:
‘rsconnect’是Shiny Server用来部署的包。这解释了为什么它会自动加载到为 Shiny Server 配置的 R 实例中。1
查看它的 dependencies,我们看到它导入了“yaml”包。这就解释了为什么这个包也被加载了。最后,它还导入了“jsonlite”包。并且由于“rsconnect”在 R 启动时作为默认包加载,这解释了为什么它的导入比“闪亮”包的导入更早加载,因此 sessionInfo
的包顺序在您的本地和服务器会话。
1服务器上options('defaultPackages')
的值应该包括‘rsconnect’。
在调试闪亮的应用程序时,我注意到相同的源代码在本地 (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()
的结果不同。
仔细观察(下面的输出),您可能会注意到“通过命名空间加载的包(而不是附加的)”列表的不同之处在于服务器未加载:
- sourcetools_0.1.7
- farver_2.0.3
- yaml_2.2.1
- 此外,在服务器上,它在 crosstalk_1.0.1 之前加载 hms_0.5.3(与本地机器不同)
不确定这些差异是否会很容易导致从“已加载但未附加”包中访问对象的问题,这些包必须以 packagename::
.
作为前缀
尽管如此,我还是很惊讶地看到这些差异,想知道是什么导致了这种行为,这是否正常。
输出sessionInfo()
本地:
输出sessionInfo()
服务器:
如果我加载最小数量的包,仅 Shiny,则存在以下差异:
- 服务器列出 xtable 后跟 jsonlite,而在本地则相反;
- 服务器列出了 yaml 和 rsconnect,而在本地却没有。
输出sessionInfo()
本地:
输出sessionInfo()
服务器:
‘rsconnect’是Shiny Server用来部署的包。这解释了为什么它会自动加载到为 Shiny Server 配置的 R 实例中。1
查看它的 dependencies,我们看到它导入了“yaml”包。这就解释了为什么这个包也被加载了。最后,它还导入了“jsonlite”包。并且由于“rsconnect”在 R 启动时作为默认包加载,这解释了为什么它的导入比“闪亮”包的导入更早加载,因此 sessionInfo
的包顺序在您的本地和服务器会话。
1服务器上options('defaultPackages')
的值应该包括‘rsconnect’。