Used to create a reactive data source, which works by periodically polling a non-reactive data source.

reactivePoll(intervalMillis, session, checkFunc, valueFunc)

Arguments

intervalMillis

Approximate number of milliseconds to wait between calls to checkFunc. This can be either a numeric value, or a function that returns a numeric value.

session

The user session to associate this file reader with, or NULL if none. If non-null, the reader will automatically stop when the session ends.

checkFunc

A relatively cheap function whose values over time will be tested for equality; inequality indicates that the underlying value has changed and needs to be invalidated and re-read using valueFunc. See Details.

valueFunc

A function that calculates the underlying value. See Details.

Value

A reactive expression that returns the result of valueFunc, and invalidates when checkFunc changes.

Details

reactivePoll works by pairing a relatively cheap "check" function with a more expensive value retrieval function. The check function will be executed periodically and should always return a consistent value until the data changes. When the check function returns a different value, then the value retrieval function will be used to re-populate the data.

Note that the check function doesn't return TRUE or FALSE to indicate whether the underlying data has changed. Rather, the check function indicates change by returning a different value from the previous time it was called.

For example, reactivePoll is used to implement reactiveFileReader by pairing a check function that simply returns the last modified timestamp of a file, and a value retrieval function that actually reads the contents of the file.

As another example, one might read a relational database table reactively by using a check function that does SELECT MAX(timestamp) FROM table and a value retrieval function that does SELECT * FROM table.

The intervalMillis, checkFunc, and valueFunc functions will be executed in a reactive context; therefore, they may read reactive values and reactive expressions.

See also

Examples

function(input, output, session) { data <- reactivePoll(1000, session, # This function returns the time that log_file was last modified checkFunc = function() { if (file.exists(log_file)) file.info(log_file)$mtime[1] else "" }, # This function returns the content of log_file valueFunc = function() { read.csv(log_file) } ) output$dataTable <- renderTable({ data() }) }
#> function(input, output, session) { #> #> data <- reactivePoll(1000, session, #> # This function returns the time that log_file was last modified #> checkFunc = function() { #> if (file.exists(log_file)) #> file.info(log_file)$mtime[1] #> else #> "" #> }, #> # This function returns the content of log_file #> valueFunc = function() { #> read.csv(log_file) #> } #> ) #> #> output$dataTable <- renderTable({ #> data() #> }) #> } #> <environment: 0x562216cb2668>