Nice idea, but "small composable programs" includes R scripts? That's great if you're already using R, a bit much to install if you're not.
You could simplify things by cribbing from the Hacker's Diet (https://www.fourmilab.ch/hackdiet/) and using an exponentially weighted moving average as your filter. 10% of today's weight + 90% yesterday's EWMA. That's almost a one-liner in awk or perl, or a simple function in bash.
Great stuff! You can make minor adjustments to the R-script so you do not need to rely on {dplyr} and {tidyr}. For example, use merge() instead of left_join() and use the base pipe, |>, instead of the magrittr pipe, %>%.
Nice idea, but "small composable programs" includes R scripts? That's great if you're already using R, a bit much to install if you're not.
You could simplify things by cribbing from the Hacker's Diet (https://www.fourmilab.ch/hackdiet/) and using an exponentially weighted moving average as your filter. 10% of today's weight + 90% yesterday's EWMA. That's almost a one-liner in awk or perl, or a simple function in bash.
Copilot suggests: awk 'BEGIN{alpha=0.1} NF>=2 { date=$1; w=$2; if (NR==1) ewma=w; else ewma=alpha*w + (1-alpha)*ewma; printf "%s\t%g\t%.6f\n", date, w, ewma }' input.txt
I don't think "small" has ever been meant to include the runtime. Is R much more complex of a runtime than awk perl or bash?
A friend did similar using rc on Plan 9: https://shithub.us/rodri/rcfitness/HEAD/info.html
Great stuff! You can make minor adjustments to the R-script so you do not need to rely on {dplyr} and {tidyr}. For example, use merge() instead of left_join() and use the base pipe, |>, instead of the magrittr pipe, %>%.
Love your approach: small, composable programs working together through pipes!