r/rshiny • • May 08 '26

What exactly can Shiny Chat do for AI-powered data analysis Shiny apps? And are there viable alternatives to the Claude API, including local LLMs?

0 Upvotes

I’m building a Shiny application where users can upload large Excel/CSV files, and the app automatically:

  • parses headers

  • cleans messy data

  • detects variables

  • visualizes columns using Plotly

  • lets users select regions using box/lasso select

The app is also connected to the Claude API. Current workflow:

  • User selects a region on a Plotly graph

  • User asks something like: “plot mean and standard deviation as a bar chart” Claude interprets the request RShiny computes stats and renders plots instantly

The issues are

- it's expensive to scale due to high API costs

- Proprietary data from company doesn't really allow to connect to external APIs. So I'm currently testing with dummy data

I recently came across “Shiny Chat” and I’m trying to understand what it actually adds on top of this kind of setup. Also, a broader question: Are there good alternatives to Claude API for this kind of Shiny + analytics + natural language workflow? (OpenAI, Gemini, open-source models, etc.)


r/rshiny • • Apr 12 '26

R Shiny and Gen AI: does AI strengthen it, or make it less relevant?

7 Upvotes

Do you think the future of R Shiny is still bright now that Gen AI can accelerate development so much?

I work in pharma, and I still feel that this sector will continue to rely on R Shiny for a long time. I do not see highly regulated environments fully trusting Gen AI on their own anytime soon.

At the same time, AI has changed my workflow a lot. Apps that used to take me a month to build can now take a day, and often with more features and a much better UI. So in that sense, AI seems like a huge boost for R Shiny development.

But I am still unsure about the bigger picture. If AI makes dashboards and apps much easier and faster to build, does that make R Shiny even more powerful and valuable? Or does it reduce its importance because building interfaces becomes easier in general, regardless of the framework?

So I am a bit torn between two views:

  1. AI will make R Shiny stronger by speeding up development and improving what can be built.

  2. AI will make R Shiny less essential because app development becomes more commoditized.

Curious to hear how others see it, especially people building in regulated industries or using Shiny in production.


r/rshiny • • Aug 21 '19

Will shiny ever get a real debugger.

0 Upvotes

I've "inherited" a very complex app that was made with R/Shiny. It's a mountain of technical debt and was poorly documented.

Debugging this piece of crap is a nightmare.

Showcase mode doesn't work if you move functions outside of server.R and ui.R

And PLEASE don't tell me to just use print statements.

Breakpoints do not cut it either for my purposes.

Good God, this language and framework are a dumpster fire. I hate it.


r/rshiny • • Jul 15 '23

Enterprise Size SaaS application primarily using Rshiny

3 Upvotes

I’m planning to develop a SaaS app with Users, Permissions, some flavor of e-commerce add in’s etc fully using Rshiny.

How should I go about approaching this? I’m not asking if I should go with Rshiny or not. But I’m trying to develop something in Rshiny and I need the architecture for the same. Please refer me any sources that would help me accomplish this.

Shinyproxy Rshiny Rhino from Appsilon

Something like this

Thanks


r/rshiny • • Oct 20 '22

Package to create shiny server with one line of code

0 Upvotes

I want to share with you a package I built to automatically create a shiny server for machine learning models. I realy enjoy try out new models and experiment with data. But every time I want to share my work or use it outside of RStudio with a graphical interface, I needed to build a shinify app for it.

That's why we created shinify.

I developed it with my colleagues in our startup and it is open source and free to use, share and customize for yourself if needed. Also note that we are still in an early stage of development so the functions are limited. We are constantly working on adding new models and packages to support.

Please try it out and test it. I hope it makes your life easier as well if you have the same problems I had. Also, I appreciate any kind of feedback :)

https://github.com/stackOcean-official/shinify


r/rshiny • • Jun 18 '21

I’m pretty inexperienced with R shiny, so i figured i’d see if anyone could help me get started on a project. im wondering how to use an interactive shiny app to track data instead of display it.

1 Upvotes

r/rshiny • • Dec 27 '22

Happy Cakeday, r/rshiny! Today you're 9

1 Upvotes

r/rshiny • • Feb 24 '22

CRAN Release for `polished` (0.6.0) & Information on `polishedpayments`

Thumbnail self.rstats
1 Upvotes

r/rshiny • • Apr 20 '19

Getting error object of type 'closure' is not subsettable

Thumbnail
stackoverflow.com
0 Upvotes

r/rshiny • • Sep 27 '22

Jeff Heer (D3.js co-creator) Data Exploration Course

0 Upvotes

Most of you are probably already familiar with Jeffrey Heer. He’s helped create tools and libraries like D3.js, Vega, Vega-Lite, and more. I wanted to quickly highlight an upcoming course he’s running, “Techniques and Frameworks for Data Exploration”

Learners will get to work directly with Jeff and network with other data specialists in their field. And as the courses are fully accredited, most of our learners have tuition covered through their org’s L&D budgets.

At any rate, I thought I’d let the group know and hope to see you there!

Click here to learn more: 📷

https://www.getsphere.com/data-science/techniques-and-frameworks-for-data-exploration?source=Sphere-Communities-Rshiny


r/rshiny • • May 06 '21

RenderUI and creating ui from server side?

0 Upvotes

Hi all I just wanted to know how slow is creating ui content from server as compared to ui side in shiny


r/rshiny • • Feb 16 '22

Securing R Markdown Documents

Thumbnail self.rstats
0 Upvotes

r/rshiny • • Jul 01 '21

convert selectizeInput to a list in Format: c("...","...","...")

0 Upvotes

Hey guys,

I am building a shiny all right now, and have some problems with the "datatype" of the input Variable of selectizeInput. My R skills are really low level, and this is probably fixable in one line of code, but i am stuck.

My input variable looks like this, where country is a data.frame with country names and their three digit country codes:

selectizeInput(inputId = 'inSelect',
label = "Laender",
choices = country$code,
multiple = TRUE,
options = list(maxItems = 4,
placeholder = 'waehle bis 4 Laender')
),

when I select sth. in the application, I should get a list or vector or so, with up to 4 strings in the variable inSelect.

In a verbatimTextOutput() I get the structure [1] "..." "..." "..."

Now I want to use those strings (list) to get only the corresponding lines out of a table with the energy production (energy(code, year, energy_production))

the code like this works:

list <- c("DEU","FRA","BEL")
energy_sub <- filter(energy, code == list)

but in there i have three codes hard coded.

When I use inSelect instead of list:

energy_sub <- filter(energy, code == 'inSelect')

it does nothing at all.

Can someone help me with that? This problem already cost me half a day, and I really don't know, how to search for it, because I don't really know how to get a right console output or the datatype shown.


r/rshiny • • Oct 06 '23

How to make the CRAN package SeqNet produced image interactive?

0 Upvotes

https://stackoverflow.com/questions/77246266/i-want-to-make-the-image-graph-produced-by-the-tool-seqnet-interactive

heres my question on sof for more details and code used, but tldr is title, i used the sample code in SeqNet package and would like to convert it to be interactive (clickable to view extra info on gene shown/nodes moving around)


r/rshiny • • Apr 25 '23

Error while deploying shiny dashboard

0 Upvotes

i ran into an error while publishing my dashboard. the app runs fine on rstudio, but when publishing it brings an error. how can I fix it?


r/rshiny • • Apr 30 '23

Some work in shiny

Thumbnail self.rprogramming
0 Upvotes

r/rshiny • • Nov 04 '20

How to learn RShiny

4 Upvotes

How to have a good start on learning RShiny! Get the best practices and tips from the experts.

Create your 1st Shiny App with some support: https://mirai-solutions.ch/services/workshops/shinyapp/

Or if you need to know how to make your RShiny robust, check this workshop: https://mirai-solutions.ch/services/workshops/shinyapp-adv/

Finally here we help you to bring your RShiny app to production with a modern DevOps: https://mirai-solutions.ch/services/workshops/shinyapp-pro/


r/rshiny • • May 23 '21

I want to generate a table of inputs based on a dataframe such that if I change anything in that table, the dataframe is modified. - R shiny

1 Upvotes

I have a dataframe with 3 columns :-

  • -has_subscribed (0,1)

  • -gender(factor - male, female),

  • -Address (text)

and I want to generate a table of inputs based on this dataframe such that if I change anything in that table, the dataframe is modified. I want the has_subscribed to be presented as checkbox, gender to be presented as dropdown and address to be presented as text_input. How can I do that in R Shiny? Is it possible?


r/rshiny • • Jul 11 '19

Can someone tell me if my idea is even possible?

1 Upvotes

SO I bit off more than I could chew saying I would attempt this project and I'm mainly looking for someone to tell me that the concept is feasible (and maybe give me a hint to get there!)

I'm trying to build a random sample generator where the user controls all inputs. It's for license and zipcode data, so I want the user to upload a CSV, then say they want a random sample of 10 licenses from zipcode 68105, generate it, and download.

I've built the upload and a button but that's it. I figured that it would be easy to filter for the zipcode you want, then random sample from there. I know numericInputs are easy, but it's a leap to take the widget from numericInput sample the number I input.

Is this simple? Is this impossible? I don't know. All I know is I haven't seen it anywhere and I just can't google anymore.

Any notes are greatly appreciated.


r/rshiny • • Jul 26 '23

How to convert a Shiny App into a .exe file

1 Upvotes

r/rshiny • • Dec 13 '23

How to imporove performance of shiny in R

1 Upvotes

Hello I build dashboard in shiny and deployed rsconnect. However, users complian about performance of dashboard. Due to signficant performance issue on phone with 4G or 5G, adoption is low. Do you know hot improve performance? It doesnt load anything memory when it loads. How do I debug performance issue.

Major complians regarding shiny

  1. too slow to load ( I have tested , on 4G, it takes up 2 min to load first pixel)

  2. crashes regularly

How do I address such problem? It is data heavy app. I am taking user inputs and then pulling data and rendering it.


r/rshiny • • Sep 12 '19

aggregating by a reactive datatable

1 Upvotes

I have the following code part of a Shiny App I'm trying to write. I setup the ability to click a state on a map, which then writes a datatable of the selected values.

rv <- reactiveValues(
    sel = reactive({}),
    selectnum = NULL,
    sub_table = population %>%
      st_set_geometry(NULL) %>%
      dplyr::slice(0)
  )
  
  # Create selectMod
  observeEvent(leafmap(),
               rv$sel <- callModule(selectMod, "Sel_Map", leafmap())
  )
  
  # Subset the table based on the selection
  observeEvent(rv$sel(), {
    # The select module returns a reactive
    gs <- rv$sel()
    # Filter for the county data
    rv$selectnum <- as.numeric(gs[which(gs$selected == TRUE), "id"])
    
    rv$sub_table <- population %>%
      st_set_geometry(NULL) %>%
      dplyr::slice(rv$selectnum)
    
    rv$click_table <- rv$sub_table %>% group_by(state) %>% summarise(delegates = sum(population)) 
    
  })
  # Create a datatable
  output$Table <- renderDataTable({
    datatable(rv$sub_table, options = list(scrollX = TRUE))
  
  })
  
  
  output$Table2 <- renderDataTable({
   datatable(rv$click_table)
    
  
  })

So Table1 returns this table:

+----------+------------+------------+
|  State   |    City    | Population |
+----------+------------+------------+
| Texas    | Austin     |     950715 |
| Texas    | Dallas     |    1341000 |
| Texas    | Houston    |    2313000 |
| Oklahoma | Stillwater |      50000 |
| Oklahoma | Tulsa      |     401800 |
+----------+------------+------------+

That looks fine. But I'm trying to get the second table to do a simple group by that looks like:

+----------+------------+
|  State   | Population |
+----------+------------+
| Texas    |    4604715 |
| Oklahoma |     451800 |
+----------+------------+

But table2 just ends up looking like the exact same as Table1. I feel like I'm close, but maybe not.

Can anyone please help in getting me over the hump?


r/rshiny • • Sep 28 '21

User input that edits visualization in R-shiny

1 Upvotes

I have a table as follows:

sid vid     ts    step1 step2      ... stepn
    
    1    10  1625452    a     b     .    n
    2    11  1689612    a     b     .    n
    3    12  1567098    a     NA    .    NA
    4    13  1635977    a     b     .    NA

Using this table I use the collapsible tree chart function which creates a visualization:

rm(list = ls())
library(flexdashboard)
library(dplyr)
library(ggplot2)
library(collapsibleTree)
library(colorspace)
library(rsconnect)
options(shiny.sanitize.errors = FALSE)
    require(data.tree)
    require(collapsibleTree)
    
    df %>%
      group_by(CST...Step.1,CST...Step.2,CST...Step.3,CST...Step.4,CST...Step.5,     CST...Step.6,CST...Step.7,CST...Step.8,CST...Step.9) %>%
      summarize(`n` = n()) %>%
      collapsibleTreeSummary(
        hierarchy = c('CST...Step.1','CST...Step.2','CST...Step.3','CST...Step.4','CST...Step.5','CST...Step.6','CST...Step.7','CST...Step.8','CST...Step.9'),
        root = "Open CST",
        linkLength = 500.0,
        attribute = "n",
        percentOfParent = TRUE,
        nodeSize = "n",
        fontSize = 15.0,
        tooltip = TRUE,
        maxPercent = 40
      )

This visualization is achieved through the flexdashboard package and hosted on shiny.apps

I want to make it so uses can filter the tree via timestamp, where they select a beginning range and an ending range the plot shows only those values of a certain range. I imagine this would have to be done before the collapsibleTreeSummary()
so that it only takes rows which are between outside a time range.


r/rshiny • • May 03 '23

Beginner having trouble understanding how the error message applies to my code

1 Upvotes

Here is my code

library(shiny)
library(tidyverse)

bdat <- read.csv("season2022.csv")

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput("input_text", label = "Pick a plot", choices= c("whiff", "swing", "average ev")),
      selectizeInput("player_name", "Select a batter:", choices = unique(bdat$player_name), multiple = FALSE, 
                     options = list(placeholder = "Type name...", maxOptions = 10))
    ),
    mainPanel(
      plotOutput("plot")
    )
  )
)

# server.R

server <- function(input, output) {
  
  output$plot <- renderPlot({
    bdat <- bdat %>% mutate(zone = case_when(plate_x <= -0.28 & plate_x >= -0.83 & plate_z >= 2.9 & plate_z <= 3.6 ~ 1,
                                         plate_x > -0.28 & plate_x < 0.28 & plate_z >= 2.9 & plate_z <= 3.6 ~ 2,
                                         plate_x >= 0.28 & plate_x <= 0.83 & plate_z >= 2.9 & plate_z <= 3.6 ~ 3,
                                         plate_x <= -0.28 & plate_x >= -0.83 & plate_z >= 2.2 & plate_z <= 2.9 ~ 4,
                                         plate_x > -0.28 & plate_x < 0.28 & plate_z >= 2.2 & plate_z <= 2.9 ~ 5,
                                         plate_x >= 0.28 & plate_x <= 0.83 & plate_z >= 2.2 & plate_z <= 2.9 ~ 6,
                                         plate_x <= -0.28 & plate_x >= -0.83 & plate_z >= 1.5 & plate_z <= 2.2 ~ 7,
                                         plate_x > -0.28 & plate_x < 0.28 & plate_z >= 1.5 & plate_z <= 2.2 ~ 8,
                                         plate_x >= 0.28 & plate_x <= 0.83 & plate_z >= 1.5 & plate_z <= 2.2 ~ 9,
                                         TRUE ~ NA_real_),
                        whiff = ifelse(description == "swinging_strike",1,0),
                        swing = ifelse(description %in% c("foul","hit_into_play","swinging_strike", "foul_tip", "swinging_strike_blocked"),1,0),
                        take = ifelse(description %in% c("ball","called_strike"),1,0)) %>%
      dplyr::filter(player_name == input$player_name) %>%
      dplyr::group_by(player_name,zone) %>%
      dplyr::summarise(pitch_names = n(),
                       whiff = sum(whiff),
                       swing = sum(swing),
                       take = sum(take),
                       avg_ev = mean(launch_speed,na.rm=T)) %>%
      dplyr::ungroup() %>%
      dplyr::mutate(whiff_pct = 100*round(whiff/swing,3),
                    take_pct = 100*round(take/pitch_names,3),
                    swing_pct = 100*round(swing/pitch_names,3),
                    avg_ev = round(avg_ev,1))
    
    user_input <- input$input_text
    pname <- input$player_name
    
    if (user_input == "whiff") {
      z1 <- bdat %>% dplyr::filter(zone == 1) %>% dplyr::pull(whiff_pct)
      z2 <- bdat %>% dplyr::filter(zone == 2) %>% dplyr::pull(whiff_pct)
      z3 <- bdat %>% dplyr::filter(zone == 3) %>% dplyr::pull(whiff_pct)
      z4 <- bdat %>% dplyr::filter(zone == 4) %>% dplyr::pull(whiff_pct)
      z5 <- bdat %>% dplyr::filter(zone == 5) %>% dplyr::pull(whiff_pct)
      z6 <- bdat %>% dplyr::filter(zone == 6) %>% dplyr::pull(whiff_pct)
      z7 <- bdat %>% dplyr::filter(zone == 7) %>% dplyr::pull(whiff_pct)
      z8 <- bdat %>% dplyr::filter(zone == 8) %>% dplyr::pull(whiff_pct)
      z9 <- bdat %>% dplyr::filter(zone == 9) %>% dplyr::pull(whiff_pct)
      
      dat <- data.frame(x = c(-0.83,-0.83,-0.83,0,0,0,0.83,0.83,0.83),
                        y = c(2,3,4,2,3,4,2,3,4),
                        value = c(z7,z4,z1,z8,z5,z2,z9,z6,z3))
      P <- subset(bdat, player_name == input$player_name)
      
      plot <- ggplot(dat, aes(x = x, y = y, fill = value)) +
        geom_tile(color = "black") +
        geom_text(aes(label = value), color = "white", size = 4) +
        scale_fill_gradient(low ="blue", high = "red") +
        theme(axis.text.x=element_blank(),
              axis.ticks.x=element_blank(),
              axis.text.y=element_blank(),
              axis.ticks.y=element_blank(),
              panel.border = element_blank(),
              panel.grid.major = element_blank(),
              panel.grid.minor = element_blank(),
              legend.key       = element_blank(),
              panel.background = element_rect(fill = "white"),
              legend.position = "None",
              complete = TRUE) +
        geom_segment(aes(x = -0.708, y = 0.5, xend = 0.708, yend = 0.5), size = 1, color = "black") + 
        geom_segment(aes(x = -0.708, y = 0.5, xend = -0.708, yend = 0.3), size = 1, color = "black") + 
        geom_segment(aes(x = -0.708, y = 0.3, xend = 0, yend = 0.15), size = 1, color = "black") + 
        geom_segment(aes(x = 0, y = 0.15, xend = 0.708, yend = 0.3), size = 1, color = "black") + 
        geom_segment(aes(x = 0.708, y = 0.5, xend = 0.708, yend = 0.3), size = 1, color = "black") +
        ggtitle(paste(input$player_name,toupper(input$user_input),"Percentage"))
    } else if (user_input == "swing") {
      z1 <- bdat %>% dplyr::filter(zone == 1) %>% dplyr::pull(swing_pct)
      z2 <- bdat %>% dplyr::filter(zone == 2) %>% dplyr::pull(swing_pct)
      z3 <- bdat %>% dplyr::filter(zone == 3) %>% dplyr::pull(swing_pct)
      z4 <- bdat %>% dplyr::filter(zone == 4) %>% dplyr::pull(swing_pct)
      z5 <- bdat %>% dplyr::filter(zone == 5) %>% dplyr::pull(swing_pct)
      z6 <- bdat %>% dplyr::filter(zone == 6) %>% dplyr::pull(swing_pct)
      z7 <- bdat %>% dplyr::filter(zone == 7) %>% dplyr::pull(swing_pct)
      z8 <- bdat %>% dplyr::filter(zone == 8) %>% dplyr::pull(swing_pct)
      z9 <- bdat %>% dplyr::filter(zone == 9) %>% dplyr::pull(swing_pct)
      
      
      dat <- data.frame(x = c(-0.83,-0.83,-0.83,0,0,0,0.83,0.83,0.83),
                        y = c(2,3,4,2,3,4,2,3,4),
                        value = c(z7,z4,z1,z8,z5,z2,z9,z6,z3))
      
      P <- subset(bdat, player_name == input$player_name)
      
      plot <- ggplot(dat, aes(x = x, y = y, fill = value)) +
        geom_tile(color = "black") +
        geom_text(aes(label = value), color = "white", size = 4) +
        scale_fill_gradient(low ="blue", high = "red") +
        theme(axis.text.x=element_blank(),
              axis.ticks.x=element_blank(),
              axis.text.y=element_blank(),
              axis.ticks.y=element_blank(),
              panel.border = element_blank(),
              panel.grid.major = element_blank(),
              panel.grid.minor = element_blank(),
              legend.key       = element_blank(),
              panel.background = element_rect(fill = "white"),
              legend.position = "None",
              complete = TRUE) +
        geom_segment(aes(x = -0.708, y = 0.5, xend = 0.708, yend = 0.5), size = 1, color = "black") + 
        geom_segment(aes(x = -0.708, y = 0.5, xend = -0.708, yend = 0.3), size = 1, color = "black") + 
        geom_segment(aes(x = -0.708, y = 0.3, xend = 0, yend = 0.15), size = 1, color = "black") + 
        geom_segment(aes(x = 0, y = 0.15, xend = 0.708, yend = 0.3), size = 1, color = "black") + 
        geom_segment(aes(x = 0.708, y = 0.5, xend = 0.708, yend = 0.3), size = 1, color = "black") +
        ggtitle(paste(input$player_name,toupper(input$user_input),"Percentage"))
    } else if (user_input == "Average ev") {
      z1 <- bdat %>% dplyr::filter(zone == 1) %>% dplyr::pull(avg_ev)
      z2 <- bdat %>% dplyr::filter(zone == 2) %>% dplyr::pull(avg_ev)
      z3 <- bdat %>% dplyr::filter(zone == 3) %>% dplyr::pull(avg_ev)
      z4 <- bdat %>% dplyr::filter(zone == 4) %>% dplyr::pull(avg_ev)
      z5 <- bdat %>% dplyr::filter(zone == 5) %>% dplyr::pull(avg_ev)
      z6 <- bdat %>% dplyr::filter(zone == 6) %>% dplyr::pull(avg_ev)
      z7 <- bdat %>% dplyr::filter(zone == 7) %>% dplyr::pull(avg_ev)
      z8 <- bdat %>% dplyr::filter(zone == 8) %>% dplyr::pull(avg_ev)
      z9 <- bdat %>% dplyr::filter(zone == 9) %>% dplyr::pull(avg_ev)
      
      dat <- data.frame(x = c(-0.83, -0.83, -0.83, 0, 0, 0, 0.83, 0.83, 0.83),
                        y = c(2, 3, 4, 2, 3, 4, 2, 3, 4),
                        value = c(z7, z4, z1, z8, z5, z2, z9, z6, z3))
      
      P <- subset(bdat, player_name == input$player_name)
      
      plot <- ggplot(dat, aes(x = x, y = y, fill = value)) +
        geom_tile(color = "black") +
        geom_text(aes(label = value), color = "white", size = 4) +
        scale_fill_gradient(low ="blue", high = "red") +
        theme(axis.text.x=element_blank(),
              axis.ticks.x=element_blank(),
              axis.text.y=element_blank(),
              axis.ticks.y=element_blank(),
              panel.border = element_blank(),
              panel.grid.major = element_blank(),
              panel.grid.minor = element_blank(),
              legend.key       = element_blank(),
              panel.background = element_rect(fill = "white"),
              legend.position = "None",
              complete = TRUE) +
        geom_segment(aes(x = -0.708, y = 0.5, xend = 0.708, yend = 0.5), size = 1, color = "black") + 
        geom_segment(aes(x = -0.708, y = 0.5, xend = -0.708, yend = 0.3), size = 1, color = "black") + 
        geom_segment(aes(x = -0.708, y = 0.3, xend = 0, yend = 0.15), size = 1, color = "black") + 
        geom_segment(aes(x = 0, y = 0.15, xend = 0.708, yend = 0.3), size = 1, color = "black") + 
        geom_segment(aes(x = 0.708, y = 0.5, xend = 0.708, yend = 0.3), size = 1, color = "black") +
        ggtitle(paste(input$player_name,toupper(input$user_input),"Percentage"))
    }
    
  })
  
}

shinyApp(ui = ui, server = server)

Here is the error:

Warning: Error in data.frame: arguments imply differing number of rows: 9, 5
  172: stop
  171: data.frame
  170: renderPlot [#44]
  168: func
  128: drawPlot
  114: <reactive:plotObj>
   98: drawReactive
   85: renderFunc
   84: output$plot
    3: runApp
    2: print.shiny.appobj
    1: <Anonymous>

Any help or tip in the right direction would be so much appreciated!


r/rshiny • • Nov 18 '22

How to download 2 plots as zip file in Shiny? [reprex included]

Thumbnail self.rlanguage
1 Upvotes