[R] Accessing an object using a string

Greg Snow 538280 at gmail.com
Mon Aug 15 21:23:31 CEST 2016


Hmm, names appears to be both primitive and generic, since when I look
at the function definition (3.3.0) I see:

> names
function (x)  .Primitive("names")

This is what I was referring to as the primitive.  I had originally
intended to look at the code for names to see how it accessed the
attribute, but did not want to delve into compiled code once I saw
.Primitive (and did not think that would be the best approach in this
case anyways).

If typing the name would have given pure R code then it could have
been somewhat simple to modify the function to work on the value of
the variable passed as an object rather than the object (some
functions like rm use NSE, but also have a list argument that will
accept a vector of character).  My suggestion of using attr or
attributes more directly should still work.

On Mon, Aug 15, 2016 at 1:10 PM, William Dunlap <wdunlap at tibco.com> wrote:
> 'names' is an S3-generic function.  E.g., in R-3.3.0:
>
>   > names.unnamed <- function(x) sprintf("#%0*d", ceiling(log10(length(x))),
> seq_along(x))
>   > u <- structure(letters, class="unnamed")
>   > names(u)
>    [1] "#01" "#02" "#03" "#04" "#05" "#06" "#07"
>    [8] "#08" "#09" "#10" "#11" "#12" "#13" "#14"
>   [15] "#15" "#16" "#17" "#18" "#19" "#20" "#21"
>   [22] "#22" "#23" "#24" "#25" "#26"
>
> There are a lot of C/C++ based functions that use an internal function to
> get
> the names of vectors and they may not use this method, but R code will use
> it.
>
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com
>
> On Mon, Aug 15, 2016 at 11:33 AM, Greg Snow <538280 at gmail.com> wrote:
>>
>> 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.Maubach at 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 at 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.
>> 538280 at gmail.com
>>
>> ______________________________________________
>> R-help at 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.
538280 at gmail.com



More information about the R-help mailing list