我正在为数据分析操作构建闪亮的应用程序。这一切都很好。
我想知道有没有办法显示日志,即R Studio中发生的事情。像print()消息或R控制台正在打印的任何内容。我需要在闪亮的应用程序中以交互方式显示所有这些活动。
就像我们打印进度时一样,是否有任何方法可以附加进度消息而不是显示新消息。
我搜查了实习,但在这方面找不到任何东西。
有没有人做过这种事情?任何帮助都可以得到赞赏。
答案 0 :(得分:6)
那么可能有更好的方法适用于R& R Shiny在您的计算机上和R Shiny在服务器上运行 - >库(log4r的)
library(log4r)
loggerDebug <- create.logger()
logfile(loggerDebug) <- 'data/debugData.log'
level(loggerDebug) <- 'INFO'
loggerServer <- create.logger()
logfile(loggerServer) <- 'data/serverData.log'
level(loggerServer) <- 'INFO'
# examples of levels
# debug(logger, 'A Debugging Message') # Won't print anything
# info(logger, 'An Info Message')
# warn(logger, 'A Warning Message')
# error(logger, 'An Error Message')
# fatal(logger, 'A Fatal Error Message')
确保在服务器上具有正确的读写访问权限,否则它将无法正常工作。 (记住R服务器正在写,而不是你)
# this depends on your security settings and rights
# talk to your UNIX ADMIN first
test <- list()
test$test <- "test"
# to change in linux / unix
system("chmod a+rwx /...pathToYourApp..../data")
system("chmod a+rwx /...pathToYourApp..../data/debugData.log")
info(loggerDebug, paste('| TEST |',test$test,"|"))
# close after write (for security):
system("chmod u=-x,g-x,o-rwx /...pathToYourApp..../data")
system("chmod u=-x,g-x,o-rwx /...pathToYourApp..../data/debugData.log")
为了更安全,你可以做到:
system("chattr +a /...pathToYourApp..../data/debugData.log")
这只允许附加到文件,因此不能对现有内容进行任何修改。 (可以帮助说服UNIX ADMIN)
您可以在工作时打开日志文件,如果您使用RStudio或使用更自动更新的更动态的软件包(如Sublime Text或....),请务必刷新或重新打开文件
我希望这有帮助,也许你找到了更好的方法,让我们知道
答案 1 :(得分:0)
例如检查具有多个消息的函数的日志的相关答案。
library(shiny)
ui <- fluidPage(
titlePanel("produce output or message"),
sidebarLayout(
sidebarPanel(
radioButtons(inputId = "object",
label = "Generate output (or message)",
choices = c("cars", "iris")
),
radioButtons(inputId = "type",
label = "Type of capture",
choices = c("message", "output")
,selected = "output"
),
),
mainPanel(
uiOutput("main")
)
)
)
server <- function(input, output, session) {
values<-reactiveValues()
observeEvent(input$object,{
filename <- tempfile(fileext=".txt")
filenamePath <- normalizePath(filename, mustWork = F)
values[["outfile"]] <- filenamePath
})
observeEvent(c(input$object,input$type),{
capture.output(
# FUNCTION OF INTEREST
get(input$object)
,file= (outfile <- file(values[["outfile"]],"w"))
,type=input$type
)
close(outfile)
message(values[["outfile"]]) # for console only
})
filenameR <- eventReactive(c(input$object, input$type),{
f<-values[["outfile"]]
})
output$log <- renderText({
rawText <- filenameR()
validate(need(try(readLines(rawText) ), message = FALSE) )
replacedText <- paste(readLines(rawText), collapse = "\n")
replacedText <- gsub("\\\033\\[[[:digit:]]{2}m","",replacedText) # removes ansicolor when present
return(replacedText)
}
)
output$main <- renderUI({
wellPanel(
h2("log")
,verbatimTextOutput("log")
)
})
}
shinyApp(ui = ui, server = server)