[R] Antwort: Accessing an object using a string (SOLVED)

G.Maubach at weinwolf.de G.Maubach at weinwolf.de
Mon Aug 15 15:40:58 CEST 2016


Hi All,

I found the function get() which returns an object.

My whole function looks like this:

-- cut --

#-------------------------------------------------------------------------------
# Module        : t_load_dataset.R
# Author        : Georg Maubach
# Date          : 2016-08-15
# Update        : 2016-08-15
# Description   : Load dataset and print information on contents
# Source System : R 3.3.0 (64 Bit)
# Target System : R 3.3.0 (64 Bit)
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#--------1---------2---------3---------4---------5---------6---------7---------8

t_module_name = "t_load_dataset"
t_version = "2016-08-15"
t_status = "released"

cat(
  paste0("\n",
         t_module_name, " (Version: ", t_version, ", Status: ", t_status, 
")", "\n", "\n",
         "Copyright (C) Georg Maubach 2016

This software comes with ABSOLUTELY NO WARRANTY.", "\n", "\n"))

# If do_test is not defined globally define it here locally by 
un-commenting it
# Switch t_do_test to TRUE to run test
t_do_test <- FALSE

# [ Function Defintion 
]--------------------------------------------------------
t_load_dataset <- function(file_path,
                           file_name) {
  # Loads and RData file with all objects in it and prints information on 
its
  # contents
  #
  # Args:
  #  file_path (string):
  #    String with path name.
  #  file_name (string):
  #    String with file name.
  #
  # Operation:
  #   Loads the RData file with all its objects, stores the objects in the
  #   global environment .GlobalEnv and prints information about the 
objects.
  #
  # Usage:
  #   The function is designed to work only on data frames.
  #
  # Returns:
  #   Nothing, but stores loaded objects directly into the global 
environment.
  #
  # Error handling:
  #   None.
 
#-----------------------------------------------------------------------------
 
  cat("----------------------- [ t_load_dataset() ] 
----------------------\n\n")
 
  file_location <- file.path(file_path, file_name)
 
  cat(paste0('Loading ', file_location, " ...\n\n"))
 
  dataset_list <- load(file = file_location,
                       envir = .GlobalEnv)
 
  cat(paste0(
    length(dataset_list),
    " dataset(s) loaded:\n"))
  cat(dataset_list)
  cat("\n\n")

  for (dataset in dataset_list) {
    cat(paste0("Dataset '", dataset, "' contains ",
                nrow(get(dataset, envir = .GlobalEnv)),
                " cases in ",
                ncol(get(dataset, envir = .GlobalEnv)),
                " variables:\n"))
    cat(names(get(dataset, envir = .GlobalEnv)))
    cat("\n\n")
  }
 
  cat("------------------------------ [ Done ] 
---------------------------\n\n")
}

# [ Test Defintion 
]------------------------------------------------------------
t_test <- function(do_test = FALSE) {
  if (do_test == TRUE) {
 
    # Example dataset
    var1 <- c(1, 2, 3)
    var2 <- c(4, 5, 6)
    d_data1 <- data.frame(var1, var2)
 
    var3 <- c(7, 8, 9)
    var4 <- c(10, 11, 12)
    d_data2 <- data.frame(var3, var4)
 
    # Save datasets
    v_file_name <- "test_t_load_dataset.RData"
 
    save(file = file.path(getwd(),
                          v_file_name),
         list = c("d_data1", "d_data2"))
 
    # Call function
    t_load_dataset(file_path = getwd(), file_name = v_file_name)
 
    # Cleanup
    unlink(file.path(getwd(), v_file_name))
  }
}

# [ Test Run 
]------------------------------------------------------------------
t_test(do_test = t_do_test)

# [ Clean up 
]------------------------------------------------------------------
rm("t_module_name", "t_version", "t_status", "t_do_test", "t_test")

# EOF

-- cut --

I will include it later the toolbox of R function on Sourceforge.net.

Kind regards

Georg




Von:    G.Maubach at weinwolf.de
An:     r-help at r-project.org, 
Datum:  15.08.2016 10:51
Betreff:        [R] Accessing an object using a string
Gesendet von:   "R-help" <r-help-bounces at r-project.org>



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.



More information about the R-help mailing list