The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
The goal of lzstring-r is to provide an R wrapper for the lzstring C++ library. lzstring is originally a JavaScript library that provides fast and efficient string compression and decompression using a LZ-based algorithm. Credit goes to Winston Chang for spotting this missing R package and guiding me over at the R Shinylive repo—check out his awesome contributions which this repo is based on here and here. Also, shoutout to Andy Kras for his implementation in C++ of lzstring, which you can find right here, and pieroxy, the original brain behind lzstring in JavaScript—peek at his work over here.
You can install the released version of lzstringr from CRAN with:
install.packages("lzstring")
You can install the development version of lzstringr from GitHub with:
# install.packages("devtools")
::install_github("parmsam/lzstring-r") devtools
This is a basic example which shows you how to solve a common problem:
library(lzstring)
# text data
= "The quick brown fox jumps over the lazy dog!";
message
= lzstring::compressToBase64(message)
compressed
compressed#> [1] "CoCwpgBAjgrglgYwNYQEYCcD2B3AdhAM0wA8IArGAWwAcBnCTANzHQgBdwIAbAQwC8AnhAAmmAOYBCIA"
= lzstring::decompressFromBase64(compressed)
decompressed cat(decompressed)
#> The quick brown fox jumps over the lazy dog!
# JSON data
<- list(name = "John Doe", age = 30, email = "john.doe@example.com")
json_data <- jsonlite::toJSON(json_data)
json_string
= lzstring::compressToBase64(json_string)
compressed
compressed#> [1] "N4IgdghgtgpiBcBtEApA9gCzAAgCJrgF0AaECAcziQGYAGEkGKCASwBsFkArTMAOgAmBAAIwAHtAAObGHwDGaKCEIBfIA==="
= lzstring::decompressFromBase64(compressed)
decompressed identical(json_string, decompressed)
#> [1] FALSE
cat(decompressed)
#> {"name":["John Doe"],"age":[30],"email":["john.doe@example.com"]}
<- "
js_code function test() {
console.log('Hello, World!');
}
"
= lzstring::compressToBase64(js_code)
compressed
compressed#> [1] "FAMwrgdgxgLglgewgAhgUwM4wBQEpkDeywyyUSGCANmgHRUIDm2A5ABJpUMA0yA6ggBOVACYBCFrgDcxAL7AgA=="
= lzstring::decompressFromBase64(compressed)
decompressed cat(decompressed)
#>
#> function test() {
#> console.log('Hello, World!');
#> }
<- '
r_code library(dplyr)
data <- data.frame(
name = c("John", "Jane", "Jake"),
age = c(28, 22, 32),
salary = c(50000, 60000, 55000)
)
# Filter data for age greater than 25
filtered_data <- filter(data, age > 25)
# Add a new column with updated salary
data <- mutate(data, updated_salary = salary * 1.05)
'
= lzstring::compressToBase64(r_code)
compressed
compressed#> [1] "FAGwlgRgTghlCeAKAJgBxPKBKYxkwBcYACAHgFpj8iA6AM1gFsBTRYY4gOxheIF5iAY0QAiAFIB7ABacRAGmLiYnZvMViYAa1VY57YjADmzfkMQAmABwLz5hQGZzu/QGcYIOPFPCArAAYAvwUANkCg4h9/AJwcYABiYgAxMBACZigqQhI6CQyjE0MoZkJ04gIpZWJzH2A6FLSi5AB9ahIKYjrU9JQshXziAD4qn1iEgEFkZAMuZgB3IQkQAFdGTmJZsHLiJdRqZim3DwQ8LLJKRiWiNJ6iBR295sPPUyeEYgAqYgBGGj8R4CAA=="
= lzstring::decompressFromBase64(compressed)
decompose cat(decompose)
#>
#> library(dplyr)
#>
#> data <- data.frame(
#> name = c("John", "Jane", "Jake"),
#> age = c(28, 22, 32),
#> salary = c(50000, 60000, 55000)
#> )
#>
#> # Filter data for age greater than 25
#> filtered_data <- filter(data, age > 25)
#>
#> # Add a new column with updated salary
#> data <- mutate(data, updated_salary = salary * 1.05)
<- lzstring::decompressFromEncodedURIComponent("NobwRAdghgtgpmAXGKAHVA6ASmANGAYwHsIAXOMpMAGwEsAjAJykYE8AKAZwAtaJWAlAB0IdJiw71OY4RBEBiAAQAROADM+cRQFUAkorVFGitKkWluUUooAmzAO6cTi3p1JEA5sxiKAtP98RAFdaRQAeX0VUKA84AH1OWhs4ehZ2ERFFRSUAQXRzWlJqLQDAiCzSQuLFAF5FITAACThqaiJFAGVefgBCBtwM8uzOpJSWKKgIFoMjRT5UINInUszFROTU4zr1scZ0uSGspV0IBdJETrpk40NjCy0IIJh6OGMiNUV6PmWA1azpUaME5nfZZMFzU6LXQ2Wr1MBfCCcfp-MHUKAvaiwhoAOSeLzeHwRnEQyMOYJgfFhAEYBmSsjAoAAPWEAVgADLTwVkAG5QahBLR1ADMbJRsiyAlpqyUAHlFmcLo1aG5PN4-L8hqg2qQ5aQQUR5VCYXUGjZlaQAArahqyWQKFTqTRrV7c16KNoeWgERSMOAARxCvph7lsDmcrncXlg6v8Ik4LrdEQMQQgBEqJHY80WuEUBr1iwEihAgyOiiVKqjPne5m4Whl1BhADEoIVuGogpiAOJwVjx4zKKxQGNlUv2Vs+-0CtxwGGPZ5u6tE6WKAAqrkUcEZqF9nESJBrVkUsSmzHITiHEdV0eVinszHQM4hzgIfOoy5Dvog1ytRGsIb4ZovuQB7nNKy5Uhgii6NYN4NL6UBprQroNCYX41q86hGFoPAGg2nxaFAixEAylQvq0rDLmCvq+JucAEIsj72LW5RZksiiZpCpAACREoWBCWBAsTLgATJB0FOHmZzmKwqBaDeQ5ar+qySYsXFmm4P7WEmn7ftq7DFmSzJJmoLYWO21BcfYpl8B4KJEuEkTxn67AUhA7CMpKigMoy7mecUgkWBgeawqxPHfIoADUihUnaZIRqCXKMpyXJMHAUAANZOHURLJeCxCYiaYDyAA7CyOQ5MoABCpJcp8RjXFiYBMYUcA1YlaL0I1ADq1mCQU8DmO0UyMtYrxBKg6blBxXnfMIeAovSLblIV5aRmq1ZWYUNn9XASJgGKqwAL6yIdgxKAAwvBwFdHwrAmPkKyIt0rB5Kg7AhLCIQ5n2rpbM6jC-bIYCHQAukAA")
x <- jsonlite::fromJSON(x)
y cat(y$name)
#> app.R
cat(y$content)
#> library(shiny)
#> library(bslib)
#>
#> # Define UI for app that draws a histogram ----
#> ui <- page_sidebar(
#>
#> # App title ----
#> title = "Hello Shiny!",
#>
#> # Sidebar panel for inputs ----
#> sidebar = sidebar(
#>
#> # Input: Slider for the number of bins ----
#> sliderInput(
#> inputId = "bins",
#> label = "Number of bins:",
#> min = 1,
#> max = 50,
#> value = 30
#> )
#> ),
#>
#> # Output: Histogram ----
#> plotOutput(outputId = "distPlot")
#> )
#>
#> # Define server logic required to draw a histogram ----
#> server <- function(input, output) {
#>
#> # Histogram of the Old Faithful Geyser Data ----
#> # with requested number of bins
#> # This expression that generates a histogram is wrapped in a call
#> # to renderPlot to indicate that:
#> #
#> # 1. It is "reactive" and therefore should be automatically
#> # re-executed when inputs (input$bins) change
#> # 2. Its output type is a plot
#> output$distPlot <- renderPlot({
#> x <- faithful$waiting
#> bins <- seq(min(x), max(x), length.out = input$bins + 1)
#>
#> hist(
#> x,
#> breaks = bins,
#> col = "#75AADB",
#> border = "white",
#> xlab = "Waiting time to next eruption (in mins)",
#> main = "Histogram of waiting times"
#> )
#> })
#> }
#>
#> # Create Shiny app ----
#> shinyApp(ui = ui, server = server)
<- lzstring::decompressFromEncodedURIComponent("NobwRAdghgtgpmAXGKAHVA6VBPMAaMAYwHsIAXOcpMAMwCdiYACAZwAsBLCbDOAD1R04LFkw4xUxOmTERUAVzJ4mQiABM4dZfI4AdCPp0YuCsgH0WAGw4a6ACl2RHyxwDlnTAAzKAjJ+9MAEyeAJT64RAAAqq2GBR8ZPoaNExkCXYhiPpMOSpwZPJ0EEw0jhAAVIFioiAmihgQGUzlQQC+jvpgrQC6QA")
x <- jsonlite::fromJSON(x)
y cat(y$name)
#> app.py
cat(y$content)
#> from shiny.express import input, render, ui
#>
#> ui.input_slider("n", "N", 0, 100, 20)
#>
#>
#> @render.text
#> def txt():
#> return f"n*2 is {input.n() * 2}"
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.