Sign in

Simon Smart

@simonsmart.bsky.social
214 followers 267 following 119 posts

✨ Research Software Engineer at University of Birmingham 🥔 Former spudologist 🌱 Grows plants 🚲 Rides bikes 🍺 Brews beer 🌐 github.com/simon-smart88

PostsRepliesMedia
Reposted by Simon Smart
Stats For Bios @statsforbios.bsky.social · 11/09/2026
Preprint shinyapp by @simonsmart.bsky.social here. User-friendly, reproducible software for high-resolution predictions from aggregate polygon case counts (or other data). Once you're done, click a button to get a Rmd file out. #RStats #DiseaseMapping #malaria www.medrxiv.org/content/10.6...
The Disagapp hex logo. Polygons and rasters superimposed.
054
Simon Smart @simonsmart.bsky.social · 09/09/2026
#rstats When you have a choice of characters as a parameter to a function, how should the choices be formatted in the docs? I have previously used option A without ever checking what the "correct" way is. 1/3
3 options for formatting:

character. Outcome type for the dataset. Either `binary` or `continuous`.
character. Outcome type for the dataset. Either "binary" or "continuous".
character. Outcome type for the dataset. Either `"binary"` or `"continuous"`.
250
Simon Smart @simonsmart.bsky.social · 18/06/2026
Metainsight is now available on CRAN! cran.r-project.org/package=meta... It is a shiny app for conducting network meta-analysis, which in simple terms, is used by doctors to decide which of multiple treatments is best to treat your ailments. #rstats #metaanalysis #openscience 1/5
A screenshot of the app running show options in the sidebar and two forest plots displayed side by side
161
Simon Smart @simonsmart.bsky.social · 13/06/2026
Saturday meetings aren't great but can't get a much better venue to chat about #rstats
000
Reposted by Simon Smart
Peter Coles 🏳️‍🌈 🏳️‍⚧️ 🇮🇪 @telescoper.bsky.social · 07/06/2026
Whichever of the purple dots you look at turns more purple.
28767273
Reposted by Simon Smart
BF Francis Ouellette @bffo.bsky.social · 14/05/2026
From @plos.org #Computational #Biology | Biomedical open source software: Crucial packages and hidden heroes | #Bioinformatics #RStats #Bioconductor #CRAN #PyPI #ScientificSoftware #Research #Education #OpenScience #OpenSource | 🧬🖥️🧪🔓 ⬇️ journals.plos.org/ploscompbiol...
journals.plos.org
Biomedical open source software: Crucial packages and hidden heroes
Author summary Scientists today use software as an important tool for their research. The progress of science depends on the people who write software being properly recognized, rewarded, and incentiv...
1144
Simon Smart @simonsmart.bsky.social · 26/03/2026
I’m giving a seminar on 20th April about refactoring crsu.shinyapps.io/MetaInsight/ to use {shinyscholar}, producing crsu.shinyapps.io/MetaInsight_... Details and sign up: www.eventbrite.co.uk/e/crsu-webin... A shorter version is also coming to R/Medicine in May #rstats #metaanalysis #openscience
Poster for the seminar: MetaInsight v7: Making a comprehensive app for network meta analysis reproducible
002
Simon Smart @simonsmart.bsky.social · 20/03/2026
Thanks for breaking #rstats with your spam @energtx.bsky.social. Even after muting you, there are no older posts.
2110
Simon Smart @simonsmart.bsky.social · 05/03/2026
Partial matching of names in #rstats is wild. I knew the function would run, but didn't know it "works" with dataframes as well!
f <- function(very_fast, 
              incredibly_dangerous){
  data.frame("very_fast" = 
             very_fast, 
             "incredibly_dangerous" = 
             incredibly_dangerous)
}

df <- f(v = 1, i = 2)
df$very * df$inc
df$very_broken <- 3
df$very * df$inc
341
Simon Smart @simonsmart.bsky.social · 03/03/2026
When submitting #Rstats packages to CRAN you can either: spend weeks writing a comprehensive test suite and get threatened with removal when one don't pass under some unusual condition, OR don't write any tests, R CMD check still passes, most users are none the wiser and you won't be threatened.
3100
Simon Smart @simonsmart.bsky.social · 23/02/2026
It's surprising that neither R CMD INSTALL nor R CMD check flag having two identically named functions in an #rstats package. It's easy to accidentally duplicate when refactoring code and can lead to much confusion!
361
Simon Smart @simonsmart.bsky.social · 10/02/2026
Is there a term for figuring something out that LLMs say isn't possible? Grind coding? Organic coding? In this case, rendering <text> elements in an SVG to <path> in #Rstats. (Claude cooked up a whole non-functioning package in an attempt to do it).
'<svg><text x="0" y="200" 
style="font-size: 100px;">
Hello world</text></svg>' |>
charToRaw() |>
rsvg::rsvg_svg(NULL) |>
rawToChar()
010
Simon Smart @simonsmart.bsky.social · 02/12/2025
I've spent a lot of time wrestling with base #rstats plots in Shiny this year and thought I'd share the solution I've come up with to ensure they scale correctly and downloads match exactly what is shown in the app: simon-smart88.github.io/forest_plot_...
simon-smart88.github.io
Seeing the forest for the lines - Scaling complex base plots in Shiny
050
Simon Smart @simonsmart.bsky.social · 20/10/2025
#rstats when I run devtools::test() from the Build pane I get an error that mirai isn't installed even though it is. I use r2u and have already uninstalled with apt remove and reinstalled. It runs okay from the terminal but whatever environment shinytest2 runs in can't find mirai either. Any ideas?
==> devtools::test()

ℹ Testing metainsight
Error in load_imports(path) : The package "mirai" is required.
Calls: <Anonymous> ... load_imports -> deps_check_installed -> check_installed
Execution halted

Exited with status 1.
210
Simon Smart @simonsmart.bsky.social · 21/08/2025
I've made digital art using .svgs for many years and inspired by #rtistry I've made a #rstats #rshiny app which generates them: simonsmart.shinyapps.io/savage-patte... the video shows some example outputs.
1134
Simon Smart @simonsmart.bsky.social · 21/07/2025
Myself and @statsforbios.bsky.social are running a workshop in September to introduce Disagapp disagapp.le.ac.uk for disaggregation regression. More details and sign up at forms.office.com/e/pjfbD6RvTi #rstats #episky #AcademicSky
Disaggregation regression produces high resolution predictions from data aggregated into polygons making it well suited to epidemiological modelling. Disagapp makes the process simple and easy! 

Join Simon Smart and Tim Lucas for this introductory workshop.

On Teams 14:00-16:00 UTC  16 September 2025 

See more details and sign up via the QR code
072
Simon Smart @simonsmart.bsky.social · 11/06/2025
Pretty cool that 10 % of UK farmland is now being managed with an #rstats #rshiny app www.linkedin.com/posts/tomscr... #iykyk
linkedin.com
🚀 Today, we’re announcing a big milestone for Soil Benchmark ✨ 10% of… | Tom Scrope | 39 comments
🚀 Today, we’re announcing a big milestone for Soil Benchmark ✨ 10% of English farmland now uses our platform ✨ 🎉 To celebrate, we’re offering 10% off all week. It&#39;s free to get started and a...
000
Simon Smart @simonsmart.bsky.social · 19/05/2025
Shinyscholar 0.4.1 is up on CRAN. The UI has been migrated to {bslib} along with other tweaks to modernise it. Async tasks now run using {mirai}. Want to learn more? Then come along to the Workshop for Ukraine in a few weeks : sites.google.com/view/dariia-... #rstats
sites.google.com
Dariia Mykhailyshyna - Workshops for Ukraine
Feedback on the past workshops (if you want to learn how to make wordclouds, check out Text Data Analysis workshop below)
010
Simon Smart @simonsmart.bsky.social · 02/05/2025
I'm delivering a Workshop for Ukraine on 5 June about {shinyscholar} cran.r-project.org/web/packages... a template for creating reproducible shiny apps for complex analyses in #rstats . More info and sign up here: sites.google.com/view/dariia-...
sites.google.com
Dariia Mykhailyshyna - Workshops for Ukraine
Feedback on the past workshops (if you want to learn how to make wordclouds, check out Text Data Analysis workshop below)
045
Simon Smart @simonsmart.bsky.social · 29/04/2025
Being able to cancel and restart slow-running jobs in shiny with {mirai} is a bit of a game-changer #rstats Full app in alt text / gist.github.com/simon-smart8... with a method for updating progress too
library(shiny)
library(bslib)
library(mirai)

daemons(1)
onStop(function() daemons(0))

ui <- page_fluid(
  p("The time is ", textOutput("current_time", inline = TRUE)),
  hr(),
  numericInput("n", "Sample size (n)", 100),
  numericInput("delay", "Seconds to take for plot", 5),
  actionButton("btn", "Go"),
  textOutput("progress_log"),
  plotOutput("plot"),
)

my_func <- function(x, y, file){
  writeLines(paste0("Starting..."), file)
  for (i in 1:y){
    Sys.sleep(1)
    writeLines(paste0("Step ", i, " complete"), file)
  }
  writeLines(paste0("Finished"), file)
  runif(x)
}

server <- function(input, output, session) {

  progress_file <- tempfile()

  output$current_time <- renderText({
    invalidateLater(1000)
    format(Sys.time(), "%H:%M:%S %p")
  })

  task_var <- NULL
  task <- ExtendedTask$new(
    function(...) task_var <<- mirai(run(...), environment(), .args = list(run = my_func))
  )

  observeEvent(input$btn, {
    if (task$status() == "running"){
      mirai::stop_mirai(task_var)
    }
    task$invoke(input$n, input$delay, progress_file)}
  )

  output$plot <- renderPlot({
    if (task$status() == "success"){
      hist(task$result())
    }
  })

  progress_reader <- reactiveFileReader(100, session, progress_file,
                                        readFunc = function(file) {
                                          if (file.exists(file)) {
                                            readLines(file)
                                          }
                                        }
  )

  output$progress_log <- renderPrint({
    cat(paste(progress_reader(), collapse = "\n"))
  })

}

shinyApp(ui = ui, server = server)
1114
Simon Smart @simonsmart.bsky.social · 10/02/2025
My first R package is now available on CRAN! Shinyscholar is a template for creating complex analytical applications that are reproducible outside the application. 🧵 cran.r-project.org/web/packages... #rstats #rshiny #openscience
A screenshot of an R shiny application created by shinyscholar, with user inputs on the left sidebar, a tab panel to move between components and a main panel featuring a map, table and results.
2187
Simon Smart @simonsmart.bsky.social · 06/12/2024
Day 6 part 1 of #adventofcode in #Rstats. I learnt from day 4 and padded the input from the start which made it a lot simpler. Barely any use of apply which makes a change from so far.
020
Simon Smart @simonsmart.bsky.social · 05/12/2024
Day 5 part 2 of #adventofcode in base #Rstats. This took forever to work out until I realised I could always put the first wrong element at the end
170
Simon Smart @simonsmart.bsky.social · 05/12/2024
Just in time for Day 5 part 1 of #adventofcode in base #Rstats. Not super pleased with this and I'm sure there is some room for improvement, but it works.
060
Simon Smart @simonsmart.bsky.social · 04/12/2024
Day 4 part 1 of #adventofcode in base #Rstats. This was a whole lot easier once the input was padded. I was surprised there is no function equivalent to rdrr.io/cran/terra/m... for a matrix (or is there?)
291
Simon Smart @simonsmart.bsky.social · 04/12/2024
Day 3 of #adventofcode in base #Rstats and I managed to write some regex all by myself!
090