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.