Home > OS >  Using a string to create a function name
Using a string to create a function name

Time:11-11

Does anyone know a way to return three dataframes with similar names without copying and pasting?

Basically a way to write this:

  mean_dbh <- aggregate(dbh ~ date   plot, data, mean)
  mean_agb <- aggregate(agb ~ date   plot, data, mean)
  mean_ba <- aggregate(ba ~ date   plot, data, mean)

something like

for (val in c('dbh','agb','ba)){
  mean_'val' <- aggregate(val ~ date   plot, data, mean)
}

CodePudding user response:

Alternative, you could try this. First, generate one data frame with all variables and then select each variable for a new file:

library(dplyr)
df <- aggregate(cbind(dbh,agb,ba)  ~ date   plot, data, mean)
val <- c('dbh','agb','ba')
for (i in seq(length(val))){
  assign(paste0('mean_', val[i]), df %>% select(date, plot, val[i]))}

CodePudding user response:

In R we try to avoid creating variables with values stored in the variable names. It makes working with those data.frames much more difficult in general. It's better to work with related values in a list. Here's an alternate way to tackle your problem

vars <- c("dbh","agb","ba")
mean_var <- vars |>
  sapply(function(x) reformulate(c("date","plot"), response = x)) |>
  lapply(function(x) aggregate(x, data, mean)) |>
  setNames(vars)

This will create a list and you can extract the values with

mean_var$dbh
mean_var$agb
mean_var$ba
# or...
mean_var[[1]]
mean_var[[2]]
mean_var[[3]]
  •  Tags:  
  • r
  • Related