Recommended way to select multiple DataFrame columns parametrically, i.e. not by the names

using names in such transforms is almost never needed. You can do just:

julia> df = DataFrame(reshape(1:30, 3, 10), :auto)
3×10 DataFrame
 Row │ x1     x2     x3     x4     x5     x6     x7     x8     x9     x10
     │ Int64  Int64  Int64  Int64  Int64  Int64  Int64  Int64  Int64  Int64
─────┼──────────────────────────────────────────────────────────────────────
   1 │     1      4      7     10     13     16     19     22     25     28
   2 │     2      5      8     11     14     17     20     23     26     29
   3 │     3      6      9     12     15     18     21     24     27     30

julia> transform(df, 4:10 .=> plus_one, renamecols=false) # just say you do want to keep old column names
3×10 DataFrame
 Row │ x1     x2     x3     x4     x5     x6     x7     x8     x9     x10
     │ Int64  Int64  Int64  Int64  Int64  Int64  Int64  Int64  Int64  Int64
─────┼──────────────────────────────────────────────────────────────────────
   1 │     1      4      7     11     14     17     20     23     26     29
   2 │     2      5      8     12     15     18     21     24     27     30
   3 │     3      6      9     13     16     19     22     25     28     31

julia> transform(df, 4:10 .=> plus_one .=> identity) # use identity function as transformation of source column names
3×10 DataFrame
 Row │ x1     x2     x3     x4     x5     x6     x7     x8     x9     x10
     │ Int64  Int64  Int64  Int64  Int64  Int64  Int64  Int64  Int64  Int64
─────┼──────────────────────────────────────────────────────────────────────
   1 │     1      4      7     11     14     17     20     23     26     29
   2 │     2      5      8     12     15     18     21     24     27     30
   3 │     3      6      9     13     16     19     22     25     28     31
4 Likes