Sean Zhang
2008-Dec-23 20:53 UTC
[R] quotation problem/dataframe names as function input argument.
Dear R friends: Can someone help me with the following problem? Many thanks in advance. # Problem Description: # I want to write functions which take a (character) vector of dataframe names as input argument. # For example, I want to extract the number of observations from a number of dataframes. # I tried the following: nobs.fun <- function (dframe.vec) { nobs.vec <- array(NA,c(length(dframe.vec),1)) for (i in 1:length(dframe.vec)) { nobs.vec[i] <- dim(dframe.vec[i])[1] } return(nobs.vec) } # To show the problem, I create a fake dataframe and store its name (i.e., dframe.1) # in a vector (i.e., dframe.vec) of length 1. # creation of fake dataframe dframe.1 <- as.data.frame(matrix(seq(1:2),c(1,2))) # store the dataframe name into a vector using c() function dframe.vec <- c("dframe.1") # The problem is that the following line does not work nobs.fun(dframe.vec) # Seems to me, the problem stems from the fact that dframe.vec[1] is intepreted by R as "dframe.vec" (note: it is quotated) # and dim("dframe.vec")[1] gives NULL. # Also, I realize the following line works as expected (note: dframe.1 is not quoted any more): dim(dframe.1)[1] So my question is then: how can I pass dataframe names as an input argument for another function without running into the quotation mark issue above? Any hint? Thank you in advance. -Sean [[alternative HTML version deleted]]
David Winsemius
2008-Dec-23 21:16 UTC
[R] quotation problem/dataframe names as function input argument.
I think you are making it too hard. See if one of these is a path to the answer you seek: > get(dframe.vec) V1 V2 1 1 2 #---- > n.obs <- function(x) dim(x) > n.obs(get(dframe.vec)) [1] 1 2 #------- > ng.obs <- function(x) dim(get(x)) > ng.obs(dframe.vec) [1] 1 2 #----- > ng1.obs <- function(x) dim(get(x)[1]) > ng1.obs(dframe.vec) [1] 1 1 Best; David Winsemius On Dec 23, 2008, at 3:53 PM, Sean Zhang wrote:> Dear R friends: > > Can someone help me with the following problem? Many thanks in > advance. > > # Problem Description: > # I want to write functions which take a (character) vector of > dataframe > names as input argument. > # For example, I want to extract the number of observations from a > number of > dataframes. > # I tried the following: > > nobs.fun <- function (dframe.vec) > { > nobs.vec <- array(NA,c(length(dframe.vec),1)) > > for (i in 1:length(dframe.vec)) > { > nobs.vec[i] <- dim(dframe.vec[i])[1] > } > > return(nobs.vec) > } > > # To show the problem, I create a fake dataframe and store its name > (i.e., > dframe.1) > # in a vector (i.e., dframe.vec) of length 1. > > # creation of fake dataframe > dframe.1 <- as.data.frame(matrix(seq(1:2),c(1,2))) > # store the dataframe name into a vector using c() function > dframe.vec <- c("dframe.1") > > # The problem is that the following line does not work > nobs.fun(dframe.vec) > > # Seems to me, the problem stems from the fact that dframe.vec[1] is > intepreted by R as "dframe.vec" (note: it is quotated) > # and dim("dframe.vec")[1] gives NULL. > # Also, I realize the following line works as expected (note: dframe. > 1 is > not quoted any more): > dim(dframe.1)[1] > > So my question is then: how can I pass dataframe names as an input > argument > for another function > without running into the quotation mark issue above? > > Any hint? > > Thank you in advance. > -Sean > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > 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.