OK. For the names of the variables you can include this code in the loop (variable nv):
seq.dat<-c(seq(7,10,1), seq(12,17,1)) for( i in 1:length(seq.dat) ) { j<-seq.dat[i] nv<-names(ssfa)[j] with( ssfa, twoplots(TO_POS, ssfa[[j]], nv) ) } And this modification in the function (nm): #defines the function for the plots (as written by Duncan Murdoch) twoplots <- function(x, y,nm) { ylab <- deparse(substitute(y)) # get the expression passed as y xlab <- deparse(substitute(x)) # get the expression passed as x hist(y, main=paste("Histogram of ", nm), xlab=ylab) boxplot(y ~ x, main=paste("Boxplot of", ylab, "by", xlab), xlab=xlab, ylab=ylab) } Regards, Carlos. On Tue, Jan 19, 2010 at 5:21 PM, Ivan Calandra <ivan.calan...@uni-hamburg.de > wrote: > Thank you for your answer, I got the second part! > Ivan > > > Le 1/19/2010 17:03, Carlos Ortega a écrit : > > Hello, > > You can loop in the subset you need by storing in a variable and looping on > that variable with indexes: > > seq.dat<-c(seq(7,10,1), seq(12,17,1)) > for( i in 1:length(seq.dat) ) { > > j<-seq.dat[i] > with(ssfa, twoplots(TO_POS, ssfa[[j]])) > > } > > Regards, > Carlos. > > On Tue, Jan 19, 2010 at 4:53 PM, Ivan Calandra < > ivan.calan...@uni-hamburg.de> wrote: > >> Hi again! >> >> I feel like I cannot do anything by myself but I would now like to plot >> for all numeric variables I have (14 of them). I wanted to add a loop >> then. >> The code is: >> >> ------ >> #defines the function for the plots (as written by Duncan Murdoch) >> twoplots <- function(x, y) { >> ylab <- deparse(substitute(y)) # get the expression passed as y >> xlab <- deparse(substitute(x)) # get the expression passed as x >> hist(y, main=paste("Histogram of ", ylab), xlab=ylab) >> boxplot(y ~ x, main=paste("Boxplot of", ylab, "by", xlab), xlab=xlab, >> ylab=ylab) >> } >> >> #run the function on ssfa with TO_POS as x and ssfa[[i]] as y, the >> numerical variables are from column 7 to 21 >> for (i in 7:21) { >> with(ssfa, twoplots(TO_POS, ssfa[[i]])) >> } >> ------ >> >> I have therefore two questions: >> - The code above works fine, but in the titles I get "Histogram of >> ssfa[[i]]" instead of "Histogram of 'variable name'" >> - What if I don't want to loop on all variables, but for example, >> variables (=columns) 7 to 10 and 12 to 17? How do I give such breaks and >> ranges? >> I admit I'm thinking about it since yesterday and I don't have a clue... >> >> I hope you will be able to help me. >> Thanks in advance, >> Ivan. >> >> >> >> Duncan Murdoch a écrit : >> > On 18/01/2010 9:02 AM, Ivan Calandra wrote: >> >> Hi everybody! >> >> >> >> I'm trying to write a script to plot a histogram, a boxplot and a >> >> qq-plot (under Windows XP, R2.10 if it matters) >> >> >> >> What I want to do: define the variables (x and y) to be used at the >> >> very beginning, so that I don't have to change all occurrences in the >> >> script when I want to plot a different variable. >> >> >> >> The dataset is called "ssfa". TO_POS is a categorical variable >> >> containing the tooth position for each sample. Asfc is a numerical >> >> variable. In my dataset, I have more variables but it wouldn't >> >> change; I want to plot one numeric vs one category. Do I need to >> >> supply some data? I don't think it's really necessary but let me know >> >> if you would like to. >> >> >> >> The code of what I do up to now: >> >> --- >> >> x <- ssfa$TO_POS >> >> y <- ssfa$Asfc >> >> hist(y, main="Histogram of Asfc", xlab="Asfc") >> >> boxplot(y~x, main="Boxplot of Asfc by TO_POS", xlab="TO_POS", >> >> ylab="Asfc") >> >> --- >> >> >> >> I would like something like: hist(y, main="Histogram of y", xlab="y") >> >> but that will add "Asfc" where I write "y". >> >> And the same for boxplot(y~x, main="Boxplot of y by x", xlab="x", >> >> ylab="y") >> >> I thought about something like: >> >> --- >> >> cat <- "TO_POS" >> >> num <- "Asfc" >> >> x <- paste("ssfa$", "TO_POS", sep="") >> >> y <- paste("ssfa$", "Asfc", sep="") >> >> hist(y, main=paste("Histogram of ", cat, sep=""), xlab=num) >> >> --- >> >> but it doesn't work since y is a string. I don't know how to get the >> >> syntax correctly. I am on the right path at least?! >> > >> > I think you're on the wrong path. You want to write a function, and >> > pass either x and y as arguments, or pass a formula containing both >> > (the former is easier). For example, >> > >> > twoplots <- function(x, y) { >> > ylab <- deparse(substitute(y)) # get the expression passed as y >> > xlab <- deparse(substitute(x)) # get the expression passed as x >> > hist(y, main=paste("Histogram of ", ylab), xlab=ylab) >> > boxplot(y ~ x, main=paste("Boxplot of", ylab, "by", xlab), >> > xlab=xlab, ylab=ylab) >> > } >> > >> > Then >> > >> > with(ssfa, twoplots(TO_POS, Asfc)) >> > >> > will give you your plots. >> > >> > Duncan Murdoch >> > >> >> [[alternative HTML version deleted]] >> >> >> ______________________________________________ >> R-help@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. >> >> > > -- > Ivan CALANDRA > PhD Student > University of Hamburg > Biozentrum Grindel und Zoologisches Institut und Museum > Martin-Luther-King-Platz 3 > D-20146 Hamburg, GERMANY > +49(0)40 42838 6231 > ivan.calan...@uni-hamburg.de > > > > **********http://www.for771.uni-bonn.dehttp://webapp5.rrz.uni-hamburg.de/mammals/eng/mitarbeiter.php > > [[alternative HTML version deleted]]
______________________________________________ R-help@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.