Project Organization
Config Defaults
Named Settings
Project settings are easier to audit when defaults and overrides are explicit named values.
Program
Play the script to pick a runtime profile and see the final settings summary.
config_defaults.R
Replay: real traced execution (multi-file project)
profile_index <- 1
profiles <- c("dev", "test", "prod")
sample_sizes <- c(dev = 10, test = 100, prod = 1000)
profile <- profiles[profile_index]
sample_size <- sample_sizes[[profile]]
label <- paste(profile, sample_size, sep = ":")
cat(label, "\n", sep = "")
profile_index <- 2
profiles <- c("dev", "test", "prod")
sample_sizes <- c(dev = 10, test = 100, prod = 1000)
profile <- profiles[profile_index]
sample_size <- sample_sizes[[profile]]
label <- paste(profile, sample_size, sep = ":")
cat(label, "\n", sep = "")
profile_index <- 3
profiles <- c("dev", "test", "prod")
sample_sizes <- c(dev = 10, test = 100, prod = 1000)
profile <- profiles[profile_index]
sample_size <- sample_sizes[[profile]]
label <- paste(profile, sample_size, sep = ":")
cat(label, "\n", sep = "")
profile_index ← 1
1profile_index <- 12profiles <- c("dev", "test", "prod")values this step1profile_indexprofiles ← dev, test, prod
1profile_index <- 12profiles <- c("dev", "test", "prod")3sample_sizes <- c(dev = 10, test = 100, prod = 1000)values this stepdev, test, prodprofilessample_sizes ← dev=10, test=100, prod=1000
2profiles <- c("dev", "test", "prod")3sample_sizes <- c(dev = 10, test = 100, prod = 1000)4profile <- profiles[profile_index]values this stepdev=10, test=100, prod=1000sample_sizesprofile ← dev
3sample_sizes <- c(dev = 10, test = 100, prod = 1000)4profile <- profiles[profile_index]5sample_size <- sample_sizes[[profile]]values this stepdevprofiledev, test, prodprofiles1profile_indexsample_size ← 10
4profile <- profiles[profile_index]5sample_size <- sample_sizes[[profile]]6label <- paste(profile, sample_size, sep = ":")values this step10sample_sizedevprofilelabel ← dev:10
5sample_size <- sample_sizes[[profile]]6label <- paste(profile, sample_size, sep = ":")7cat(label, "\n", sep = "")values this stepdev:10labeldevprofile10sample_sizecat(label, " ", sep = "")
6label <- paste(profile, sample_size, sep = ":")7cat(label, "\n", sep = "")outputdev:10values this stepdev:10label
profile_index ← 2
1profile_index <- 22profiles <- c("dev", "test", "prod")values this step2profile_indexprofiles ← dev, test, prod
1profile_index <- 22profiles <- c("dev", "test", "prod")3sample_sizes <- c(dev = 10, test = 100, prod = 1000)values this stepdev, test, prodprofilessample_sizes ← dev=10, test=100, prod=1000
2profiles <- c("dev", "test", "prod")3sample_sizes <- c(dev = 10, test = 100, prod = 1000)4profile <- profiles[profile_index]values this stepdev=10, test=100, prod=1000sample_sizesprofile ← test
3sample_sizes <- c(dev = 10, test = 100, prod = 1000)4profile <- profiles[profile_index]5sample_size <- sample_sizes[[profile]]values this steptestprofiledev, test, prodprofiles2profile_indexsample_size ← 100
4profile <- profiles[profile_index]5sample_size <- sample_sizes[[profile]]6label <- paste(profile, sample_size, sep = ":")values this step100sample_sizetestprofilelabel ← test:100
5sample_size <- sample_sizes[[profile]]6label <- paste(profile, sample_size, sep = ":")7cat(label, "\n", sep = "")values this steptest:100labeltestprofile100sample_sizecat(label, " ", sep = "")
6label <- paste(profile, sample_size, sep = ":")7cat(label, "\n", sep = "")outputtest:100values this steptest:100label
profile_index ← 3
1profile_index <- 32profiles <- c("dev", "test", "prod")values this step3profile_indexprofiles ← dev, test, prod
1profile_index <- 32profiles <- c("dev", "test", "prod")3sample_sizes <- c(dev = 10, test = 100, prod = 1000)values this stepdev, test, prodprofilessample_sizes ← dev=10, test=100, prod=1000
2profiles <- c("dev", "test", "prod")3sample_sizes <- c(dev = 10, test = 100, prod = 1000)4profile <- profiles[profile_index]values this stepdev=10, test=100, prod=1000sample_sizesprofile ← prod
3sample_sizes <- c(dev = 10, test = 100, prod = 1000)4profile <- profiles[profile_index]5sample_size <- sample_sizes[[profile]]values this stepprodprofiledev, test, prodprofiles3profile_indexsample_size ← 1000
4profile <- profiles[profile_index]5sample_size <- sample_sizes[[profile]]6label <- paste(profile, sample_size, sep = ":")values this step1000sample_sizeprodprofilelabel ← prod:1000
5sample_size <- sample_sizes[[profile]]6label <- paste(profile, sample_size, sep = ":")7cat(label, "\n", sep = "")values this stepprod:1000labelprodprofile1000sample_sizecat(label, " ", sep = "")
6label <- paste(profile, sample_size, sep = ":")7cat(label, "\n", sep = "")outputprod:1000values this stepprod:1000label
Follow the Profile
profile_indexstarts at1.profiles[1]selectsdev.sample_sizes[["dev"]]reads10.paste(profile, sample_size, sep = ":")buildsdev:10.- The script prints
dev:10. | profile_index | profile | sample_size | output | | ---: | --- | ---: | --- | | 1 | dev | 10 | dev:10 | | 2 | test | 100 | test:100 | | 3 | prod | 1000 | prod:1000 |
profile
A profile selects one named set of settings.
named vector
`sample_sizes[[profile]]` reads a setting by name.
configuration
Keeping settings in data makes overrides explicit.
Exercise: config_defaults.R
Reproduce dev:10, then use profile_index 2 and 3 to predict test:100 and prod:1000.