Skip to content

Instantly share code, notes, and snippets.

View alekrutkowski's full-sized avatar

alek alekrutkowski

View GitHub Profile
@alekrutkowski
alekrutkowski / CallPlumberAPI.vba
Last active March 1, 2024 13:37
Calling arbitrary R code from Excel with easy data input and output (Excel↔R)
Sub CallPlumberAPI()
Dim SERVER_URL As String
Dim xmlhttp As Object
Dim ws As Worksheet
Dim inputRange As Range, dataRange As Range, outputRange As Range
Dim cellAddress As String, rCode As String, outputAddress As String
Dim i As Long, j As Long
Dim tsvData As String, processedData As String
Dim outputData() As String, outputRow() As String
@alekrutkowski
alekrutkowski / pano_image_to_panning_video.py
Created October 29, 2023 17:56
Panoramic Image (JPEG) to panning video (MP4) converter
# Made with ChatGPT
# Required packages:
# - Pillow
# - imageio
# - imageio-ffmpeg
# - numpy
# Usage example:
# create_panning_video('My_Pano_image.jpg', 'My_Pano_video.mp4', 90, 60)
from PIL import Image
import imageio
@alekrutkowski
alekrutkowski / data.table_filtering_by_groups.R
Last active January 12, 2024 11:37
Concise/terse filtering R data.table rows by condition within groups (inside a magrittr)
library(data.table)
library(magrittr)
## Pattern:
# DT[DT[,row_filtering_expression, by=grouping_column][[2]]]
## or generally
# DT[DT[,row_filtering_expression, by=.(grouping_col1,grouping_col2,etc.)][[number_of_grouping_cols+1]]]
## Example:
data.table(a=c(1,1,1,2,2),
@alekrutkowski
alekrutkowski / async_mirai.R
Last active February 23, 2024 13:39
async/non-blocking programming in R with `mirai`
### Usage:
# a = 1; b = 2
# my_result <- eval.async(a+b)
### when mirai::unresolved(my_result) == FALSE
### you can use my_result$data
### do.call.async can be used like do.call
eval.async <-
import os
import random
import string
while True:
folder_path = input("Please enter the folder path: ")
# Check if the path is a valid directory
if os.path.isdir(folder_path):
print(f"Valid directory: {folder_path}")
@alekrutkowski
alekrutkowski / memory_address.R
Last active February 22, 2024 16:22
Get memory address of an R object
memoryAddress <- function(x)
strsplit(capture.output(.Internal(inspect(x))),split=" ")[[1]][1]
### Usage examples
# > abc <- c(1,2,3,10,11)
# > xyz <- abc
# > memoryAddress(abc)==memoryAddress(xyz)
# [1] TRUE
# > xyz <- abc+1
@alekrutkowski
alekrutkowski / listWithoutEmptyArgs.R
Last active March 13, 2024 13:59
R function for dealing with (ignoring) missing/empty arguments inside ellipsis (...)
listWithoutEmptyArgs <- function(...)
eval(Filter(\(x) !identical(as.character(x), "") || identical(x,""),
bquote(.(substitute(list(...))))))
# > list(a=1,,b=2:10)
# Error in list(a = 1, , b = 2:10) : argument 2 is empty
# > listWithoutEmptyArgs(a=1,,b=2:10)
# list(a = 1, b = 2:10)
@alekrutkowski
alekrutkowski / app.R
Last active May 17, 2024 09:30
JAF2R_SpecGen – JAF specification generator for indicators based on Eurostat data for JAF2R (https://github.com/alekrutkowski/JAF2R)
options(shiny.sanitize.errors = FALSE)
library(shiny)
library(data.table)
library(eurodata)
library(magrittr)
MetaBase <-
importMetabase() %>%
@alekrutkowski
alekrutkowski / index.html
Last active April 23, 2024 09:12
Keyboard Shortcut Cheatsheet Maker (made entirely with ChatGPT 4), hosted at https://shiny-r.dev/cheatsheet-maker/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Keyboard Shortcut Cheatsheet Generator</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="container">
@alekrutkowski
alekrutkowski / insheet_eurostat.ado
Last active June 18, 2025 14:19
Stata command to download and import a Eurostat dataset
// Usage example:
// Either the parameter is Eurostat's "online data code":
// insheet_eurostat nama_10_gdp
// or the parameter is the custom URL generated with Eurostat GUI top right corner:
// Go to e.g. https://ec.europa.eu/eurostat/databrowser/view/nama_10_gdp/default/table?lang=en and
// do your selections by clicking
// ⤓ Download > Advanced settings > Select: File format = "Text (.tsv)", Select: Data scope = "All selected dimensions", and untick "Compress file (.gzip)" > Click: [Copy] button next to the "API link"
// insheet_eurostat https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/nama_10_gdp/A.CP_MEUR.B1G+P3.EU27_2020+BE+BG+CZ+DK/?format=TSV&startPeriod=2021&endPeriod=2023
// To use it like other commands, put it in your "personal" folder/directory
// (see: https://www.stata.com/support/faqs/programming/personal-ado-directory/ and https://www.stata.com/help.cgi?personal).