我有以下Shiny包:
DESCRIPTION:
Package: mypackage
版本: 0.0.1
依賴: shiny
R/mypackage.R:
ui <- shiny:: fluidPage(getwd())
服務器 < - function(input,output。 會話) {}
為了安裝和運行,我這樣做
R -q -e "devtools::install(); shiny::runApp(shinyApp(mypackage::ui, mypackage::server))"
而當我這樣做時,我的應用程式就會輸出
/tmp/RtmpC1viCa/R。 INSTALL6931e8be933/myppackage
它并不存在。
為什么會這樣,我如何改進?我已經看到,getwd()實際上可能不會回傳用戶的作業目錄 - 但為什么會回傳一個不存在的目錄?
uj5u.com熱心網友回復:
在一個Shiny應用程式中,getwd()指的是應用程式目錄。
然而,由于你正在創建一個包,所以你需要注意并謹慎對待代碼的執行位置/時間。
包內檔案范圍的代碼在安裝時被執行。而R包的安裝發生在一個臨時目錄內,以隔離它。事實上, 如果你需要 解決方案是使用 如果你不喜歡使用 但是,另外你也可以創建一個函式來回傳UI: 并通過
標籤:R CMD check將警告你這一點。
getwd()的值(以及其他特定路徑的函式,如system.file),你一定不能在檔案范圍內呼叫它。
.onLoad包鉤。在你的案例中,你需要在包加載時創建并分配整個用戶界面:。 onl oad < - function (libname, pkgname) { >。
assign()
'ui'/span>,
shiny:: fluidPage(getwd()),
topenv()
)
}
assign,$<-也可以:. onl oad < - function (libname, pkgname) { >。
topenv()$ui <- shiny:: fluidPage(getwd()),
}
ui < - function () {}。
shiny::fluidPage(getwd()
}。
shiny::runApp(shinyApp(mypackage:: ui(), mypackage。 ::server))
