gpt4 book ai didi

r - 有效调试 Shiny 的应用程序

转载 作者:行者123 更新时间:2023-12-03 08:21:00 28 4
gpt4 key购买 nike

我有一个复杂的 Shiny 应用程序,分布在多个文件中,它使用来自多个包的代码。该应用程序在 R Studio 中本地运行时可以工作,但在我的服务器上它会引发一般错误:

Error: do not know how to convert 'x' to class "Date"



这可能是一个简单的编程错误,但要弄清楚代码中错误的确切位置是很困难的。

如何查找并修复 Shiny 应用程序中的错误来源?有哪些工具可以系统地做到这一点?

Google Groups 上有一些类似问题的讨论。 .

最佳答案

您可以使用 logging 的组合来实现登录服务器。和 shinyjs .

install.packages("logging")
install.packages("shinyjs")

在您的 ui.R 中,绑定(bind) shinyjs使用 shinyjs::useShinyjs :
library(shinyjs)

shinyUI(
fluidPage(
useShinyjs(),
# etc...

在您的 server.R 中,添加 logjs到日志处理程序列表:
library(magrittr)
library(shinyjs)
library(logging)

basicConfig()

options(shiny.error = function() {
logging::logerror(sys.calls() %>% as.character %>% paste(collapse = ", ")) })

shinyServer(function(input, output, session) {

printLogJs <- function(x, ...) {

logjs(x)

T
}

addHandler(printLogJs)
# etc...

然后打印一些东西,使用 loginfo .

其他提示
  • 在本地运行应用程序时,例如从 RStudio,使用 options(shiny.error = browser)options(shiny.error = recover)以确定错误的来源。
  • 将尽可能多的业务逻辑放入包和外部脚本中。每当您怀疑它们引起问题时,对它们进行单元测试。 testthat包可以在这里提供帮助。
  • 如果您希望变量满足某些约束,请添加断言。例如,如果 x应该是 zoo , 把 assert_that(is.zoo(x))在你的 react 顶部附近。
  • 注意默认 drop行为。养成指定 drop = F 的习惯每当您希望结果为 data.frame 时.
  • 尽量减少代码单元所依赖的变量(选项、环境、缓存、UI 状态等)的数量。弱类型语言已经很难调试了!
  • 尽可能使用正确的 S4 和 S3 类而不是原始 R 结构。
  • dput将允许您检查对象的内部结构,并且在尝试在应用程序之外重现错误时非常有用。
  • 尝试在交互式控制台中进行调试,而不是使用 print在一个应用程序内。这将允许您更快地迭代。如果无法在应用程序之外进行调试,请尝试输入 browser()在问题代码之前调用。
  • 切勿使用 sapply在非交互式代码中。如果输出为空,它将无法推断出您想要的类型并返回空 list .如果您的结果应该是 vector , 使用 vapply .如果您的结果应该是 list , 使用 lapply .

  • 您还应该查看 Debugging Shiny Applications来自 RStudio 团队。

    关于r - 有效调试 Shiny 的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31920286/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com