I'm surprised no one has given what I consider to be the standard answer to this questions, namely ?get. Won't
for (i in object_list) { print(paste0("Object '", i, "' in '", file_name, "' contains:")) str(get(i)) print(names(get(i))) # works } do what you want? Best, Ista On Tue, Aug 16, 2016 at 11:46 AM, Greg Snow <538...@gmail.com> wrote: > Interestingly I just gave a presentation on this last Friday. > > Using load it is a little more complicated since load reads the object > name from the file as well (which can lead to overwriting objects if > loading from more than one file). So it is better to use another save > format if possible. One alternative is to use the saveRDS and readRDS > functions. > > Here is the example that I presented: > > First, create some sample data files on the disk (here saving as .csv files) > > data('Oxboys', package='nlme') > obl <- split(Oxboys, Oxboys$Subject) > for(d in obl) { > write.csv(d, file=sprintf("OxBoys%02d.csv", > d$Subject[1]), > row.names=FALSE) > } > rm(Oxboys,obl) > > > Now read the files into R into a single list (and add names to the > list, optional but can be nice): > > fnames <- list.files(pattern='^OxBoys') > ob.new <- lapply(fnames, read.csv) > nms <- paste0('OxBoys', sapply(ob.new, > function(df) df$Subject[1])) > names(ob.new) <- nms > head( ob.new$OxBoys1 ) > > The list.files function in the first line is one convenient way to > create the vector of filenames, but other options would include > paste0, sprintf, and others. > > Now perform the same analysis on each data frame in the list and > nicely format the results (a simple regression in this case): > > slopes <- sapply(ob.new, function(df) { > fit <- lm(height~age, data=df) > coef(fit) > }) > head(t(slopes)) > > > > > On Tue, Aug 16, 2016 at 12:43 AM, <g.maub...@weinwolf.de> wrote: >> Hi Greg >> and all others who replied to my question, >> >> many thanks for all your answers and help. Currently I store all my >> objects in .GlobalEnv = Workspace. I am not yet familiar working with >> different environments nor did I see that this would be necessary for my >> analysis. >> >> Could you explain why working with different environments would be >> helpful? >> >> You suggested to read variables into lists rather than storing them in >> global variables. This sounds interesting. Could you provide an example of >> how to define and use this? >> >> Kind regards >> >> Georg >> >> >> >> Von: Greg Snow <538...@gmail.com> >> An: g.maub...@weinwolf.de, >> Kopie: r-help <r-help@r-project.org> >> Datum: 15.08.2016 20:33 >> Betreff: Re: [R] Accessing an object using a string >> >> >> >> The names function is a primitive, which means that if it does not >> already do what you want, it is generally not going to be easy to >> coerce it to do it. >> >> However, the names of an object are generally stored as an attribute >> of that object, which can be accessed using the attr or attributes >> functions. If you change your code to not use the names function and >> instead use attr or attributes to access the names then it should work >> for you. >> >> >> You may also want to consider changing your workflow to have your data >> objects read into a list rather than global variables, then process >> using lapply/sapply (this would require a change in how your data is >> saved from your example, but if you can change that then everything >> after can be cleaner/simpler/easier/more fool proof/etc.) >> >> >> On Mon, Aug 15, 2016 at 2:49 AM, <g.maub...@weinwolf.de> wrote: >>> Hi All, >>> >>> I would like to access an object using a sting. >>> >>> # Create example dataset >>> var1 <- c(1, 2, 3) >>> var2 <- c(4, 5, 6) >>> data1 <- data.frame(var1, var2) >>> >>> var3 <- c(7, 8, 9) >>> var4 <- c(10, 11, 12) >>> data2 <- data.frame(var3, var4) >>> >>> save(file = "c:/temp/test.RData", list = c("data1", "data2")) >>> >>> # Define function >>> t_load_dataset <- function(file_path, >>> file_name) { >>> file_location <- file.path(file_path, file_name) >>> >>> print(paste0('Loading ', file_location, " ...")) >>> cat("\n") >>> >>> object_list <- load(file = file_location, >>> envir = .GlobalEnv) >>> >>> print(paste(length(object_list), "dataset(s) loaded from", >>> file_location)) >>> cat("\n") >>> >>> print("The following objects were loaded:") >>> print(object_list) >>> cat("\n") >>> >>> for (i in object_list) { >>> print(paste0("Object '", i, "' in '", file_name, "' contains:")) >>> str(i) >>> names(i) # does not work >>> } >>> } >>> >>> I have only the character vector object_list containing the names of the >>> objects as strings. I would like to access the objects in object_list to >>> be able to print the names of the variables within the object (usuallly >> a >>> data frame). >>> >>> Is it possible to do this? How is it done? >>> >>> Kind regards >>> >>> Georg >>> >>> ______________________________________________ >>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> https://stat.ethz.ch/mailman/listinfo/r-help >>> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >>> and provide commented, minimal, self-contained, reproducible code. >> >> >> >> -- >> Gregory (Greg) L. Snow Ph.D. >> 538...@gmail.com >> >> > > > > -- > Gregory (Greg) L. Snow Ph.D. > 538...@gmail.com > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.