I have an initial value
as well as three datasets in a list:
value <- 10
df1 <- data.frame(id = c("a", "b", "c"), quantity = c(3, 7, -2))
df2 <- data.frame(id = c("d", "e", "f"), quantity = c(0, -3, 9))
df3 <- data.frame(id = c("g", "h", "i"), quantity = c(-2, 0, 4))
df_list <- list(df1, df2, df3)
I would like to apply multiple functions to each data frame in the list, dynamically update the value
at the end of the operations, and then run the same procedure on the next list item. The challenge is that the functions themselves take value
as an input.
Here is how I would accomplish this without using the apply function:
# Example function 1: Generate `outcome` by multiplying quantity times a random number
df_list[[1]]$outcome <- df_list[[1]]$quantity * sample(1:10, 1)
# Example function 2: Multiply `value` by `quantity` to update `outcome`
df_list[[1]]$outcome <- value * df_list[[1]]$quantity
# Updates `value` by adding the old `value` to the sum of the outcome column:
value <- value + as.numeric(colSums(df_list[[1]]["outcome"]))
# Repeats operations for df_list[[2]] and df_list[[3]]
df_list[[2]]$outcome <- df_list[[2]]$quantity * sample(1:10, 1)
df_list[[2]]$outcome <- value * df_list[[2]]$quantity
value <- value + as.numeric(colSums(df_list[[2]]["outcome"]))
df_list[[3]]$outcome <- df_list[[3]]$quantity * sample(1:10, 1)
df_list[[3]]$outcome <- value * df_list[[3]]$quantity
value <- value + as.numeric(colSums(df_list[[3]]["outcome"]))
I can use lapply to run the functions on each list item, but how do I access (and dynamically update) the non-list object value
before proceeding to the next list item?