Title: | Interactive Visualizations for Profiling R Code |
---|---|
Description: | Interactive visualizations for profiling R code. |
Authors: | Hadley Wickham [aut, cre], Winston Chang [aut], Javier Luraschi [aut], Timothy Mastny [aut], Posit Software, PBC [cph, fnd], jQuery Foundation [cph] (jQuery library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/htmlwidgets/lib/jquery/AUTHORS.txt), Mike Bostock [ctb, cph] (D3 library), D3 contributors [ctb] (D3 library), Ivan Sagalaev [ctb, cph] (highlight.js library) |
Maintainer: | Hadley Wickham <[email protected]> |
License: | MIT + file LICENSE |
Version: | 0.4.0.9000 |
Built: | 2024-10-31 20:26:27 UTC |
Source: | https://github.com/r-lib/profvis |
This function pauses an R process for some amount of time. It differs from
Sys.sleep()
in that time spent in pause
will show up in
profiler data. Another difference is that pause
uses up 100\
whereas Sys.sleep
does not.
pause(seconds)
pause(seconds)
seconds |
Number of seconds to pause. |
# Wait for 0.5 seconds pause(0.5)
# Wait for 0.5 seconds pause(0.5)
Print a profvis object
## S3 method for class 'profvis' print(x, ..., width = NULL, height = NULL, split = NULL, aggregate = NULL)
## S3 method for class 'profvis' print(x, ..., width = NULL, height = NULL, split = NULL, aggregate = NULL)
x |
The object to print. |
... |
Further arguments to passed on to other print methods. |
width |
Width of the htmlwidget. |
height |
Height of the htmlwidget |
split |
Orientation of the split bar: either |
aggregate |
If |
This function will run an R expression with profiling, and then return an htmlwidget for interactively exploring the profiling data.
profvis( expr = NULL, interval = 0.01, prof_output = NULL, prof_input = NULL, timing = NULL, width = NULL, height = NULL, split = c("h", "v"), torture = 0, simplify = TRUE, rerun = FALSE )
profvis( expr = NULL, interval = 0.01, prof_output = NULL, prof_input = NULL, timing = NULL, width = NULL, height = NULL, split = c("h", "v"), torture = 0, simplify = TRUE, rerun = FALSE )
expr |
Expression to profile. The expression will be turned into the
body of a zero-argument anonymous function which is then called repeatedly
as needed. This means that if you create variables inside of The expression is repeatedly evaluated until Not compatible with |
interval |
Interval for profiling samples, in seconds. Values less than 0.005 (5 ms) will probably not result in accurate timings |
prof_output |
Name of an Rprof output file or directory in which to save
profiling data. If |
prof_input |
The path to an |
timing |
The type of timing to use. Either If |
width |
Width of the htmlwidget. |
height |
Height of the htmlwidget |
split |
Orientation of the split bar: either |
torture |
Triggers garbage collection after every Note that memory allocation is only approximate due to the nature of the
sampling profiler and garbage collection: when garbage collection triggers,
memory allocations will be attributed to different lines of code. Using
|
simplify |
Whether to simplify the profiles by removing
intervening frames caused by lazy evaluation. Equivalent to the
|
rerun |
If |
An alternate way to use profvis
is to separately capture the profiling
data to a file using Rprof()
, and then pass the path to the
corresponding data file as the prof_input
argument to
profvis()
.
print.profvis()
for printing options.
Rprof()
for more information about how the profiling
data is collected.
# Only run these examples in interactive R sessions if (interactive()) { # Profile some code profvis({ dat <- data.frame( x = rnorm(5e4), y = rnorm(5e4) ) plot(x ~ y, data = dat) m <- lm(x ~ y, data = dat) abline(m, col = "red") }) # Save a profile to an HTML file p <- profvis({ dat <- data.frame( x = rnorm(5e4), y = rnorm(5e4) ) plot(x ~ y, data = dat) m <- lm(x ~ y, data = dat) abline(m, col = "red") }) htmlwidgets::saveWidget(p, "profile.html") # Can open in browser from R browseURL("profile.html") }
# Only run these examples in interactive R sessions if (interactive()) { # Profile some code profvis({ dat <- data.frame( x = rnorm(5e4), y = rnorm(5e4) ) plot(x ~ y, data = dat) m <- lm(x ~ y, data = dat) abline(m, col = "red") }) # Save a profile to an HTML file p <- profvis({ dat <- data.frame( x = rnorm(5e4), y = rnorm(5e4) ) plot(x ~ y, data = dat) m <- lm(x ~ y, data = dat) abline(m, col = "red") }) htmlwidgets::saveWidget(p, "profile.html") # Can open in browser from R browseURL("profile.html") }
Use this Shiny module to inject profvis controls into your Shiny app. The profvis Shiny module injects UI that can be used to start and stop profiling, and either view the results in the profvis UI or download the raw .Rprof data. It is highly recommended that this be used for testing and debugging only, and not included in production apps!
profvis_ui(id) profvis_server(input, output, session, dir = ".")
profvis_ui(id) profvis_server(input, output, session, dir = ".")
id |
Output id from |
input , output , session
|
Arguments provided by
|
dir |
Output directory to save Rprof files. |
The usual way to use profvis with Shiny is to simply call
profvis(shiny::runApp())
, but this may not always be possible or desirable:
first, if you only want to profile a particular interaction in the Shiny app
and not capture all the calculations involved in starting up the app and
getting it into the correct state; and second, if you're trying to profile an
application that's been deployed to a server.
For more details on how to invoke Shiny modules, see this article.
# In order to avoid "Hit <Return> to see next plot" prompts, # run this example with `example(profvis_ui, ask=FALSE)` if(interactive()) { library(shiny) shinyApp( fluidPage( plotOutput("plot"), actionButton("new", "New plot"), profvis_ui("profiler") ), function(input, output, session) { callModule(profvis_server, "profiler") output$plot <- renderPlot({ input$new boxplot(mpg ~ cyl, data = mtcars) }) } ) }
# In order to avoid "Hit <Return> to see next plot" prompts, # run this example with `example(profvis_ui, ask=FALSE)` if(interactive()) { library(shiny) shinyApp( fluidPage( plotOutput("plot"), actionButton("new", "New plot"), profvis_ui("profiler") ), function(input, output, session) { callModule(profvis_server, "profiler") output$plot <- renderPlot({ input$new boxplot(mpg ~ cyl, data = mtcars) }) } ) }
Widget output and renders functions for use in Shiny
profvisOutput(outputId, width = "100%", height = "600px") renderProfvis(expr, env = parent.frame(), quoted = FALSE)
profvisOutput(outputId, width = "100%", height = "600px") renderProfvis(expr, env = parent.frame(), quoted = FALSE)
outputId |
Output variable for profile visualization. |
width |
Width of the htmlwidget. |
height |
Height of the htmlwidget |
expr |
An expression that returns a profvis object. |
env |
The environment in which to evaluate |
quoted |
Is |