browser() 和 ls() 之间的交互
Interaction between browser() and ls()
您好,我正在尝试查找有关 R Shiny 应用程序中 browser()
和 ls()
之间交互的幕后情况的一些信息。
如果我在 R Shiny 函数之外的代码中添加 browser()
语句,例如:
browser()
output$graph_1 <- renderPlot({...})
然后在控制台中调用 ls()
我看到在我的环境中定义的所有变量,正如预期的那样。一切都很好。
但是,如果我在 R Shiny 函数中调用添加 browser()
语句,例如:
output$graph_1 <- renderPlot({
browser()
...
})
然后调用 ls()
然后我只看到函数中定义的那些变量。
我从ls()
的documentation的理解是应该return环境中的所有变量,本例中的环境是R Shiny会话。但是我找不到任何关于它如何与 Shiny 函数交互的提及(或者我没有在 Google 上找到正确的关键词)。
从 Shiny 函数内部调用 ls()
是否意味着该函数 是 环境?还是有其他事情在起作用?有没有办法从 Shiny 函数中强制列出所有变量?
我正在使用 mac 和 运行 R 4.2.0、R Studio RStudio 2022.02.2+485 和 shiny 版本 1.7.1
and the environment in this case is the R Shiny session
不,那是误会。在函数调用的情况下,“环境”是该函数的本地环境。但是,您的情况仍然略有不同,因为您需要区分函数的本地环境和函数 call.
在函数 call 中(这是你所处的情况),环境是调用周围的环境,所以你的两种情况都应该为 [= 产生相同的结果11=]。至少 通常 是这样。但是,Shiny 的反应式效用函数(包括 render*
函数)不会以标准方式评估它们的参数。相反,他们使用 non-standard evaluation,参数表达式在其自己的本地环境中计算。
您需要走上 call stack 才能看到在函数外定义的变量。在 RStudio 中,您可以通常为此目的使用“Traceback”面板,但这似乎不适用于 Shiny。
相反,parent.env(environment())
会给你那个表达式的父环境,你可以 运行 ls()
在那:
ls(parent.env(environment()))
现在您应该会看到在您的服务器函数中定义的变量。
您好,我正在尝试查找有关 R Shiny 应用程序中 browser()
和 ls()
之间交互的幕后情况的一些信息。
如果我在 R Shiny 函数之外的代码中添加 browser()
语句,例如:
browser()
output$graph_1 <- renderPlot({...})
然后在控制台中调用 ls()
我看到在我的环境中定义的所有变量,正如预期的那样。一切都很好。
但是,如果我在 R Shiny 函数中调用添加 browser()
语句,例如:
output$graph_1 <- renderPlot({
browser()
...
})
然后调用 ls()
然后我只看到函数中定义的那些变量。
我从ls()
的documentation的理解是应该return环境中的所有变量,本例中的环境是R Shiny会话。但是我找不到任何关于它如何与 Shiny 函数交互的提及(或者我没有在 Google 上找到正确的关键词)。
从 Shiny 函数内部调用 ls()
是否意味着该函数 是 环境?还是有其他事情在起作用?有没有办法从 Shiny 函数中强制列出所有变量?
我正在使用 mac 和 运行 R 4.2.0、R Studio RStudio 2022.02.2+485 和 shiny 版本 1.7.1
and the environment in this case is the R Shiny session
不,那是误会。在函数调用的情况下,“环境”是该函数的本地环境。但是,您的情况仍然略有不同,因为您需要区分函数的本地环境和函数 call.
在函数 call 中(这是你所处的情况),环境是调用周围的环境,所以你的两种情况都应该为 [= 产生相同的结果11=]。至少 通常 是这样。但是,Shiny 的反应式效用函数(包括 render*
函数)不会以标准方式评估它们的参数。相反,他们使用 non-standard evaluation,参数表达式在其自己的本地环境中计算。
您需要走上 call stack 才能看到在函数外定义的变量。在 RStudio 中,您可以通常为此目的使用“Traceback”面板,但这似乎不适用于 Shiny。
相反,parent.env(environment())
会给你那个表达式的父环境,你可以 运行 ls()
在那:
ls(parent.env(environment()))
现在您应该会看到在您的服务器函数中定义的变量。