getwd() 在 Shiny 应用程序中返回不存在的目录

问题描述 投票:0回答:1

我有以下闪亮包:

DESCRIPTION

Package: mypackage
Version: 0.0.1
Depends: shiny

R/mypackage.R

ui <- shiny::fluidPage(getwd())
server <- function(input, output, session) {}

要安装并运行,我愿意

R -q -e "devtools::install(); shiny::runApp(shinyApp(mypackage:::ui, mypackage:::server))"

当我这样做时,我的应用程序输出

/tmp/RtmpC1viCa/R.INSTALL6931e8be933/mypackage

不存在。

这是为什么,我该如何改进?我已经看到

getwd()
实际上可能不会返回用户的工作目录 - 但为什么它返回一个不存在的目录?

r shiny r-package working-directory
1个回答
3
投票

在Shiny应用程序中,

getwd()
指的是应用程序目录。

但是,由于您正在创建包,因此您需要了解并小心代码的执行位置/时间。

包内文件范围内的代码在安装时执行。 R 包的安装发生在临时目录中以隔离它。事实上,R CMD check

 会警告您这一点。

如果您需要

getwd()

 的值(以及其他路径特定函数,例如 
system.file
),则
不能在文件范围内调用它。

解决方案是使用

.onLoad

 包钩子
。在您的情况下,您需要在包加载时创建并分配整个 UI

.onLoad <- function (libname, pkgname) { ns <- topenv() ns$ui <- shiny::fluidPage(getwd()) }
但是您也可以创建一个返回 UI 的

函数

ui <- function () { shiny::fluidPage(getwd()) }
并通过

运行它

shiny::runApp(shinyApp(mypackage:::ui(), mypackage:::server))
    
© www.soinside.com 2019 - 2024. All rights reserved.