Reputation: 305
Given a data table with 3 columns (the first two form the key), I'm trying to add a bunch of columns x_k
with k running from 1 to N
df
> a b c
1: 1 1 1
2: 1 2 1
3: 1 3 2
For each new column x_k
, its value is calculated by the equation cos(2 * pi * c / k)
grouped by a
and b
.
My approach doesn't seem to work: generating a list of column names then parsing it
df[, eval(parse(text = paste0(paste0("x_", 1:N), " := cos(2 * pi * c / ", 1:N, ")"))), by = .(a,b)]
R said c
not found. How should i correct my approach other than looping through list of column names ?
Upvotes: 0
Views: 262
Reputation: 25225
Maybe try something like:
df[, paste0("x_", 1L:N) := lapply(1L:N, function(k) cos(2 * pi * c / k)), .(a, b)]
Upvotes: 4