Re: From object name strings to objects
Rui Barradas via R-help <[email protected]> Tue, 19 May 2026 16:34:30 +0100
| Newsgroups | gmane.comp.lang.r.general |
|---|---|
| Message-ID | <[email protected]> |
Às 11:48 de 19/05/2026, Naresh Gurbuxani escreveu:
>
> I want to stack several dataframes using their names as strings.
>
> df1 <- data.frame(name = "normal", x = rnorm(5))
> df2 <- data.frame(name = "uniform", x = runif(5))
> df3 <- data.frame(name = "binomial", x = rbinom(5, 2, 0.5))
> mynames <- c("df1", "df2", "df3")
>
> newdf <- some_function(mynames)
>
> # Desired result
> newdf <- do.call(rbind, list(df1, df2, df3))
>
> How can this be done?
>
> Thanks,
> Naresh
>
> ______________________________________________
> [email protected] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
Hello,
Something like this?
fun <- function(df_names, pattern, envir = .GlobalEnv) {
if(missing(df_names)) {
if(missing(pattern)) {
obj_names <- ls(envir = envir)
df_list <- Filter(\(x) is(x, "data.frame"), mget(obj_names, envir
= envir))
} else {
df_names <- ls(pattern = pattern, envir = envir)
df_list <- mget(df_names, envir = envir)
}
} else df_list <- mget(df_names, envir = envir)
res <- do.call(rbind, df_list)
row.names(res) <- NULL
res
}
df1 <- data.frame(name = "normal", x = rnorm(5))
df2 <- data.frame(name = "uniform", x = runif(5))
df3 <- data.frame(name = "binomial", x = rbinom(5, 2, 0.5))
mynames <- c("df1", "df2", "df3")
fun()
fun(mynames)
fun(pattern = "df")
Hope this helps,
Rui Barradas