| aiAssistant | R Documentation |
AI-powered statistical analysis assistant module server
aiAssistant(
input,
output,
session,
data,
data_label,
data_varStruct = NULL,
api_key = NULL,
stats_guide = NULL,
show_api_config = TRUE,
analysis_context = NULL
)
input |
input |
output |
output |
session |
session |
data |
Data (reactive). Should return the current data set each time it is called. |
data_label |
Data label (reactive). Typically created with 'jstable::mk.lev()'. |
data_varStruct |
Variable structure list of data (reactive or NULL). If NULL, automatically generates 'list(variable = names(data()))'. Can also be a reactive returning a named list with elements like 'Base', 'Event', 'Time', etc. Default: NULL |
api_key |
API key for AI service. If NULL, reads from provider-specific environment variables ('ANTHROPIC_API_KEY', 'OPENAI_API_KEY', 'GOOGLE_API_KEY') configured in '.Renviron' file |
stats_guide |
Optional custom statistical guide text to override default guidelines. Can be a character string or reactive. If NULL, uses built-in statistical best practices guide. Useful for adding domain-specific statistical conventions or organizational standards. |
show_api_config |
If TRUE, shows API config UI. If FALSE, uses only env vars. Default: TRUE |
analysis_context |
Optional character string, list, or reactive returning that information. Used to pass prior analysis context that the AI can reference in follow-up questions. |
'data' and 'data_label' must be reactives; their values are re-evaluated every time the module needs data.
'data_varStruct' can be NULL (auto-generated) or a reactive returning a named list with elements like 'variable', 'Base', 'Event', 'Time', etc. This mirrors the structure used by other *jsmodule* components.
Generated code runs in a sandbox that only exposes the supplied data and allows the following packages: jstable, jskm, jsmodule, survival, ggplot2, ggpubr, pROC, data.table, DT, gridExtra, GGally, forestploter, MatchIt, timeROC.
API keys are resolved in the order: explicit 'api_key' argument, UI input (if 'show_api_config = TRUE'), provider-specific environment variables ('ANTHROPIC_API_KEY', 'OPENAI_API_KEY', 'GOOGLE_API_KEY').
To use environment variables for API keys, add them to your '.Renviron' file (use 'usethis::edit_r_environ()' to open it) with lines like:
'ANTHROPIC_API_KEY=your_key_here'
'OPENAI_API_KEY=your_key_here'
'GOOGLE_API_KEY=your_key_here'
Then restart R session for changes to take effect.
'analysis_context' can be a static string/list or a reactive that returns a description of prior analyses (tables, plots, code snippets). The text is appended to the system prompt so the AI can reference earlier steps.
Server module (no explicit return value). Creates reactive outputs and observers for chat conversation history, generated code execution, analysis results (tables, plots, text), and export functionality.
## Not run:
# Setup: Add API key to .Renviron file
# usethis::edit_r_environ()
# Add line: ANTHROPIC_API_KEY=your_actual_key_here
# Save and restart R
library(shiny)
library(DT)
library(survival)
# Example 1: Basic usage with auto-generated variable structure
ui <- fluidPage(
titlePanel("AI Statistical Assistant"),
aiAssistantUI("ai")
)
server <- function(input, output, session) {
data <- reactive(colon)
data.label <- reactive(jstable::mk.lev(colon))
callModule(aiAssistant, "ai",
data = data,
data_label = data.label,
data_varStruct = NULL # Auto-generates variable structure
)
}
shinyApp(ui, server)
# Example 2: With custom variable structure and analysis context
ui2 <- fluidPage(
titlePanel("Survival Analysis Assistant"),
aiAssistantUI("ai")
)
server2 <- function(input, output, session) {
data <- reactive(colon)
data.label <- reactive(jstable::mk.lev(colon))
# Custom variable structure for survival analysis
var_struct <- reactive({
list(
variable = names(colon),
Base = c("rx", "sex", "age", "obstruct", "nodes"),
Event = "status",
Time = "time"
)
})
callModule(aiAssistant, "ai",
data = data,
data_label = data.label,
data_varStruct = var_struct,
analysis_context = reactive({
"Colon cancer adjuvant chemotherapy trial (survival::colon).
Primary outcome: time to recurrence or death (status/time).
Treatment groups: Observation, Levamisole, Levamisole+5-FU."
})
)
}
shinyApp(ui2, server2)
# Example 3: Production deployment without API config UI
ui_prod <- fluidPage(
aiAssistantUI("ai", show_api_config = FALSE)
)
server_prod <- function(input, output, session) {
# Relies entirely on .Renviron configuration
callModule(aiAssistant, "ai",
data = reactive(mtcars),
data_label = reactive(jstable::mk.lev(mtcars)),
show_api_config = FALSE
)
}
shinyApp(ui_prod, server_prod)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.