當閃亮的應用程式啟動時,默認情況下它的來源,例如所有檔案.R擴展名中R/,以及app.R檔案或server.R與ui.R檔案。我想象這些檔案中的所有物件(主要是函式)都生活在一個共同的環境中。如何訪問這個環境?比方說,我想在某些renderPrint輸出中列出此環境中的所有物件。我努力了:
output$env <- renderPrint({
names(rlang::global_env())
})
但它不起作用,它只發現 ".Random.seed"
uj5u.com熱心網友回復:
根據這篇文章:
Shiny 應用程式中的所有 R 代碼都在全域環境或其子環境中運行
我認為“或孩子”是這里的關鍵。
當您運行在環境中發生的 Shiny 會話時 - 我們稱之為A. 來自的所有函式R/都存盤在另一個環境中——我們稱之為B. 現在,A和B都是全域環境B的(祖)子,但也是 的(祖)父A。
稍微簡化一下,我們有這樣的事情:
-- Global environment
| \-- B (where your functions live)
| \-- A (current environment)
這就是為什么您可以從您的應用程式訪問功能,但您無法在全域環境或應用程式的當前環境中找到這些功能。
例子
為 Shiny 應用程式創建一個新檔案夾,并將以下函式存盤在R/whatever.R:
test_function <- function() print("TEST")
現在,在您的應用程式中,執行以下操作:
library(shiny)
ui <- fluidPage(
mainPanel(
verbatimTextOutput("objects")
)
)
server <- function(input, output) {
test_function()
output$objects <- renderPrint({
x <- pryr::parenvs(rlang::current_env())
for (i in seq_len(length(pryr::parenvs(rlang::current_env())))) {
print(x[[i]])
print(names(x[[i]]))
print("-----------------------------")
}
})
}
shinyApp(ui = ui, server = server)
這應該列印所有環境及其內容,從您當前的環境開始到全域環境結束。test_function將存盤在這些環境之間的某個地方。
要使用您的函式訪問環境,請撰寫一些邏輯來查找該環境并訪問那里的所有內容。
PS:如果你想讓任何物件或函式在全域環境中可用,你可以在檔案中創建它們global.R。這將在應用程式啟動時運行一次,并且應該使全域環境中的所有內容都可用。在此處閱讀更多相關資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/394671.html
上一篇:如何從r中的現有列創建新列
