Leo Gürtler
2005-Oct-29 00:45 UTC
[R] how to get colnames of a dataframe within a function called by 'apply'
Hello alltogether, how is it possible to assign the colnames of a data.frame to a function called by apply, e.g. for labeling a plot? Example: I want to plot several qqnorm-plots side by side and there should be a maintitle for each qqnorm-plot which is identical to the respective colname. I checked, but the column which is processed by the function called by apply does not contain a colname (because by using str() it seems it is no column at this point, but just a e.g. numerical vector). I also tried with colnames() from within the function, but was not successful to get the apropriate colname - either the whole string or just the first one.Thus it lacks of a counter that contains the number of the row which is processed. Here is an example code: <---snip---> nv <- function(xno.na) { par.or <- par(mfrow=c(3,3)) qqnorm(xno.na, main="HERE SHOULD BE THE NAME OF THE COLUMN") qqline(xno.na, col="red") par(par.or) print(str(xno.na)) } > temp # just a part of the whole data.frame klarb1 klarb2 abarb laut skla1 skla2 a NA 13.068182 7.5 4 0.5 0.5 b NA 6.818182 9.0 6 NA 0.5 c 15.11628 6.818182 10.0 4 1.0 1.5 d NA 18.181818 19.0 2 1.0 0.5 > apply(temp,2,nv) </---snip---> Thanks a lot! best wishes, leo
Gabor Grothendieck
2005-Oct-29 02:25 UTC
[R] how to get colnames of a dataframe within a function called by 'apply'
Iterate over the column names rather than the columns themselves: par.or <- par(mfrow=c(3,3)) nv <- function(name, data) { qqnorm(data[,name], main=name) qqline(data[,name], col="red") invisible() } sapply(colnames(temp), nv, data = temp) par(par.or) On 10/28/05, Leo G??rtler <leog at anicca-vijja.de> wrote:> Hello alltogether, > > how is it possible to assign the colnames of a data.frame to a function > called by apply, e.g. for labeling a plot? > Example: I want to plot several qqnorm-plots side by side and there > should be a maintitle for each qqnorm-plot which is identical to the > respective colname. > I checked, but the column which is processed by the function called by > apply does not contain a colname (because by using str() it seems it is > no column at this point, but just a e.g. numerical vector). > I also tried with colnames() from within the function, but was not > successful to get the apropriate colname - either the whole string or > just the first one.Thus it lacks of a counter that contains the number > of the row which is processed. > > Here is an example code: > > <---snip---> > > nv <- function(xno.na) > { > par.or <- par(mfrow=c(3,3)) > qqnorm(xno.na, main="HERE SHOULD BE THE NAME OF THE COLUMN") > qqline(xno.na, col="red") > par(par.or) > print(str(xno.na)) > } > > > temp # just a part of the whole data.frame > klarb1 klarb2 abarb laut skla1 skla2 > a NA 13.068182 7.5 4 0.5 0.5 > b NA 6.818182 9.0 6 NA 0.5 > c 15.11628 6.818182 10.0 4 1.0 1.5 > d NA 18.181818 19.0 2 1.0 0.5 > > > apply(temp,2,nv) > > </---snip---> > > > Thanks a lot! > > best wishes, > > leo > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >