getwd() returns 闪亮应用程序中不存在的目录
getwd() returns non-existent directory in Shiny app
我有以下闪亮的包裹:
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()
实际上可能不是 return 用户工作目录 - 但为什么它 return 是一个不存在的目录?
在 Shiny 应用程序中,getwd()
指的是应用程序目录。
但是,由于您正在创建一个程序包,因此您需要注意并小心执行 where/when 代码。
包内文件范围内的代码在安装时执行。 R 包的安装发生在一个临时目录中以将其隔离。事实上,R CMD check
会警告您。
如果您需要 getwd()
的值(以及其他特定于路径的函数,例如 system.file
),您 不能 在以下位置调用它文件范围。
解决方法是使用.onLoad
package hook. In your case, :
.onLoad <- function (libname, pkgname) {
assign(
'ui',
shiny::fluidPage(getwd()),
topenv()
)
}
如果您不喜欢使用 assign
,$<-
也可以:
.onLoad <- function (libname, pkgname) {
topenv()$ui <- shiny::fluidPage(getwd()),
}
但是您也可以创建一个 函数 ,returns UI:
ui <- function () {
shiny::fluidPage(getwd())
}
并且运行它通过
shiny::runApp(shinyApp(mypackage:::ui(), mypackage:::server))
我有以下闪亮的包裹:
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()
实际上可能不是 return 用户工作目录 - 但为什么它 return 是一个不存在的目录?
在 Shiny 应用程序中,getwd()
指的是应用程序目录。
但是,由于您正在创建一个程序包,因此您需要注意并小心执行 where/when 代码。
包内文件范围内的代码在安装时执行。 R 包的安装发生在一个临时目录中以将其隔离。事实上,R CMD check
会警告您。
如果您需要 getwd()
的值(以及其他特定于路径的函数,例如 system.file
),您 不能 在以下位置调用它文件范围。
解决方法是使用.onLoad
package hook. In your case,
.onLoad <- function (libname, pkgname) {
assign(
'ui',
shiny::fluidPage(getwd()),
topenv()
)
}
如果您不喜欢使用 assign
,$<-
也可以:
.onLoad <- function (libname, pkgname) {
topenv()$ui <- shiny::fluidPage(getwd()),
}
但是您也可以创建一个 函数 ,returns UI:
ui <- function () {
shiny::fluidPage(getwd())
}
并且运行它通过
shiny::runApp(shinyApp(mypackage:::ui(), mypackage:::server))