Hi You must use indexing based on loops sim(ss[i],cc[j],oo1[k],oo2[l])
an of course assign result to some object. result[...] <- sim(ss[i],cc[j],oo1[k],oo2[l]) where ... means some suitable index either chosen from loop index or constructed during loop execution. Maybe it is time to go through R intro document (chapter 2 and chapter 9). You probably could find answer yourself quicker then waiting for me to answer it. Regards Petr From: staysafe23 [mailto:staysaf...@gmail.com] Sent: Thursday, February 07, 2013 9:09 PM To: PIKAL Petr Subject: RE: [R] Nested loop and output help Hi Petr, I have refined my question and would like to ask it another way if I may. Here are the conditions I would like to vary in my inquiry. ss <- seq(5,9,by=1) 5 6 7 8 9 cc <- seq(-0.5,0.5, by=0.25) -0.50 -0.25 0.00 0.25 0.50 oo1 <- seq(-10,10, by=5) -10 -5 0 5 10 oo2 <- seq(0,20, by=5) 0 5 10 15 20 Here is the loop I would like to run. for(i in ss) { for (j in cc) { for (k in oo1) { for (l in oo2) { sim(ss,cc,oo1,oo2) } } } } There are the results that would like to get. sim(5,-0.5,-10,0) sim(5,-0.5,-10,5) sim(5,-0.5,-10,10) sim(5,-0.5,-10,15) sim(5,-0.5,-10,20) . . . . . . . . . sim(9,0.5,10,0) sim(9,0.5,10,5) sim(9,0.5,10,10) sim(9,0.5,10,15) sim(9,0.5,10,20) Here is my function but I am not getting the loop to run over all the possible permutations of the conditions nor and I getting an output for each condition. sim <- function(ss,cc,oo1,oo2) { lll <- vector(mode = "list", length = 16) names(lll) <- c("og_table", "McNemar", "McNemar_corr", "sd_table", "Chisq", "Chisq_corr", "og_data", "mean_X", "cut_T1", "mean_X2", "mean_Y","cut_T2", "mean_Y2", "dev_data", "sum_D", "sum_D2") z1 <- rnorm(ss,mean=400, sd=70) z2 <- rnorm(ss,mean=450, sd=90) r <- cc X <- z1 Y = r*z1+(1-r)*z2 lll[["og_data"]] <- cbind(X,Y) dev1 <- oo1 lll[["cut_T1"]] <- mean(X) + dev1 dev2 <- oo2 lll[["cut_T2"]] <- mean(X) + dev1 + dev2 X2 <- X-lll[["cut_T1"]] Y2 <- Y-lll[["cut_T2"]] c3 <- cor(X2,Y2) D <- Y2-X2 lll[["sum_D"]] <- sum(D) D2 <-D*D lll[["sum_D2"]] <- sum(D2) lll[["dev_data"]] <-cbind(X2,Y2) a11 <- ifelse( X < lll[["cut_T1"]] & Y < lll[["cut_T2"]], 1, 0) a12 <- ifelse( X < lll[["cut_T1"]] & Y >= lll[["cut_T2"]], 1, 0) a21 <- ifelse( X >= lll[["cut_T1"]] & Y < lll[["cut_T2"]], 1, 0) a22 <- ifelse( X >= lll[["cut_T1"]] & Y >= lll[["cut_T2"]], 1, 0) lll[["og_table"]] <-matrix(c(sum(a11),sum(a21), sum(a12),sum(a22)), nrow = 2) lll[["McNemar"]] <-mcnemar.test(lll[["og_table"]], correct=FALSE) lll[["McNemar_corr"]] <-mcnemar.test(lll[["og_table"]], correct=TRUE) lll[["sd_table"]] <-matrix(c(sum(a11),sum(a22), sum(a12),sum(a21)), nrow = 2) lll[["Chisq"]] <-chisq.test(lll[["sd_table"]], correct = FALSE) lll[["Chisq_corr"]] <-chisq.test(lll[["sd_table"]], correct = TRUE) lll[["mean_X"]] <- mean(X) lll[["mean_Y"]] <- mean(Y) lll[["mean_X2"]] <- mean(X2) lll[["mean_Y2"]] <- mean(Y2) lll[["T"]] <- sum(D)/((length(D)*sum(D2)-sum(D)*sum(D))/(length(D)-1))**(0.5) lll[["dep_t"]] <- t.test(Y2, X2, alternative='two.sided', conf.level=0.95, paired=TRUE) print(lll) capture.output(print(lll), file = "C:/Chi_Square_fix/temp_[ss]_[cc]_[oo1]_[002].txt", append = TRUE) } On Feb 6, 2013 3:26 PM, "staysafe23" <staysaf...@gmail.com<mailto:staysaf...@gmail.com>> wrote: Hi Petr, Thank you again for your help. I am making a mistake since I have assigned an entire vector oo1 to dev1. What I errantly thought I was doing was starting with the value of 5 in ss, then picking the value of -0.50 in cc, then picking the value of -10 in oo1, then picking the value of 0 in oo2, and running the code that is within the inner most brackets and putting the output into an output file. Then I thought the loop would move on to the next case, 5 in ss, then picking the value of -0.50 in cc, then picking the value of -10 in oo1, then picking the value of 5 in oo2. So I thought I would end up with my code being run a number of times that would equal the length(ss)*length(cc)*length(oo1)*length(oo2) . I can't seem to get the code to run through each of these conditions. Do you have any idea that may help me do so? Thank you Petr, Thomas On Feb 6, 2013 2:25 AM, "PIKAL Petr" <petr.pi...@precheza.cz<mailto:petr.pi...@precheza.cz>> wrote: Hi This is an error I get with your loop code due to this line capture.output(print(lll), file = "C:/Chi_Square_fix/temp.txt", append = TRUE) Error in file(file, if (append) "a" else "w") : cannot open the connection In addition: Warning messages: 1: In chisq.test(lll[["mat4"]], correct = FALSE) : Chi-squared approximation may be incorrect 2: In chisq.test(lll[["mat4"]], correct = TRUE) : Chi-squared approximation may be incorrect 3: In file(file, if (append) "a" else "w") : cannot open file 'C:/Chi_Square_fix/temp.txt': No such file or directory > Without this line I get no error and everything is probably printed. I do not know function capture.output but I presume that you need initialise the file temp.txt before you can output to it. Anyway those cycles are rather weird. E.g. in each cycle you assign whole vector oo1 to dev1. Is it intended? Regards Petr From: staysafe23 [mailto:staysaf...@gmail.com<mailto:staysaf...@gmail.com>] Sent: Friday, February 01, 2013 10:12 PM To: PIKAL Petr Cc: r-help@r-project.org<mailto:r-help@r-project.org> Subject: RE: [R] Nested loop and output help Thank you very much Petr, I believe I have fixed my inquiry to not use floating points in my cycle as you pointed out and to use the list structure to keep my results. I am still at a loss as to how to run the multiple loops. I have tried quite a few different strategies but my failure seems to illustrate that my understanding of how the loops will run is nonexistent. I would like to simultaneously let the following 4 things vary: z1 <- rnorm(ss,mean=400, sd=70) and z2 <- rnorm(ss,mean=450, sd=90) by ss <- seq(5,9,by=1) which yields 5 6 7 8 9 r <- cc by cc <- seq(-0.5,0.5, by=0.25) which yields -0.50 -0.25 0.00 0.25 0.50 dev1 <- oo1 by oo1 <- seq(-10,10, by=5) which yields -10 -5 0 5 10 dev2 <- oo2 by oo2 <- seq(0,20, by=5) which yields 0 5 10 15 20 I tried to run the loops that would vary each of these above conditions with the looped code attached below and failed very badly. Thank you Petr and all, Best, Thomas ###################################SINGLE RUN CODE#################################### lll <- vector(mode = "list", length = 10) names(lll) <- c("mat1", "mat2", "mat3", "mat4", "cut1", "cut2", "out3a", "out3b", "out4a", "out4b") z1 <- rnorm(20,mean=400, sd=70) z2 <- rnorm(20,mean=450, sd=90) cor <- runif(1,min=0.4, max=0.6) X <- z1 Y = cor*z1+(1-cor)*z2 lll[["mat1"]] <- cbind(X,Y) dev1 <- sample(-40:40, 1, replace=T) lll[["cut1"]] <- mean(X) + dev1 dev2 <- sample(12:54, 1, replace=T) lll[["cut2"]] <- mean(X) + dev1 + dev2 X2 <- X-lll[["cut1"]] Y2 <- Y-lll[["cut2"]] c3 <- cor(X2,Y2) lll[["mat2"]] <-cbind(X2,Y2) a11 <- ifelse( X < lll[["cut1"]] & Y < lll[["cut2"]], 1, 0) a12 <- ifelse( X < lll[["cut1"]] & Y >= lll[["cut2"]], 1, 0) a21 <- ifelse( X >= lll[["cut1"]] & Y < lll[["cut2"]], 1, 0) a22 <- ifelse( X >= lll[["cut1"]] & Y >= lll[["cut2"]], 1, 0) lll[["mat3"]] <-matrix(c(sum(a11),sum(a21), sum(a12),sum(a22)), nrow = 2) lll[["mat4"]] <-matrix(c(sum(a11),sum(a22), sum(a12),sum(a21)), nrow = 2) lll[["out3a"]] <- mcnemar.test(lll[["mat3"]], correct=FALSE) lll[["out3b"]] <- mcnemar.test(lll[["mat3"]], correct=TRUE) lll[["out4a"]] <- chisq.test(lll[["mat4"]], correct = FALSE) lll[["out4b"]] <- chisq.test(lll[["mat4"]], correct = TRUE) print(lll) capture.output(print(lll), file = "C:/Chi_Square_fix/temp.txt", append = TRUE) ######################################LOOPED CODE##################################### lll <- vector(mode = "list", length = 10) names(lll) <- c("mat1", "mat2", "mat3", "mat4", "cut1", "cut2", "out3a", "out3b", "out4a", "out4b") ss <- seq(5,9,by=1) cc <- seq(-0.5,0.5, by=0.25) oo1 <- seq(-10,10, by=5) oo2 <- seq(0,20, by=5) for(i in ss) { for (j in cc) { for (k in oo1) { for (l in oo2) { z1 <- rnorm(ss,mean=400, sd=70) z2 <- rnorm(ss,mean=450, sd=90) r <- cc X <- z1 Y = r*z1+(1-r)*z2 lll[["mat1"]] <- cbind(X,Y) dev1 <- oo1 lll[["cut1"]] <- mean(X) + dev1 dev2 <- oo2 lll[["cut2"]] <- mean(X) + dev1 + dev2 X2 <- X-lll[["cut1"]] Y2 <- Y-lll[["cut2"]] c3 <- cor(X2,Y2) lll[["mat2"]] <-cbind(X2,Y2) a11 <- ifelse( X < lll[["cut1"]] & Y < lll[["cut2"]], 1, 0) a12 <- ifelse( X < lll[["cut1"]] & Y >= lll[["cut2"]], 1, 0) a21 <- ifelse( X >= lll[["cut1"]] & Y < lll[["cut2"]], 1, 0) a22 <- ifelse( X >= lll[["cut1"]] & Y >= lll[["cut2"]], 1, 0) lll[["mat3"]] <-matrix(c(sum(a11),sum(a21), sum(a12),sum(a22)), nrow = 2) lll[["mat4"]] <-matrix(c(sum(a11),sum(a22), sum(a12),sum(a21)), nrow = 2) lll[["out3a"]] <- mcnemar.test(lll[["mat3"]], correct=FALSE) lll[["out3b"]] <- mcnemar.test(lll[["mat3"]], correct=TRUE) lll[["out4a"]] <- chisq.test(lll[["mat4"]], correct = FALSE) lll[["out4b"]] <- chisq.test(lll[["mat4"]], correct = TRUE) print(lll) capture.output(print(lll), file = "C:/Chi_Square_fix/temp.txt", append = TRUE) } } } } On Feb 1, 2013 2:01 AM, "PIKAL Petr" <petr.pi...@precheza.cz<mailto:petr.pi...@precheza.cz>> wrote: Hi see inline > -----Original Message----- > From: r-help-boun...@r-project.org<mailto:r-help-boun...@r-project.org> > [mailto:r-help-bounces@r-<mailto:r-help-bounces@r-> > project.org<http://project.org>] On Behalf Of staysafe23 > Sent: Friday, February 01, 2013 1:01 AM > To: r-help@r-project.org<mailto:r-help@r-project.org> > Subject: [R] Nested loop and output help > > Hello Everyone, > > My name is Thomas and I have been using R for one week. I recently > found your site and have been able to search the archives of posts. > This has given me some great information that has allowed me to craft > an initial design to an inquiry I would like to make into the breakdown > of McNemar's test. I have read an intro to R manual and the posting > guides and hope I am not violating them with this post. If so I will > re-ask my question in the proper format. > > I have succeeded in writing a loop to vary one condition of my inquiry > but I am unable to understand how to vary the remaining three > conditions, each with its own for loop. Each time I try to do so I fail > miserably. Here is my current code : > > n <- seq(5,10,by=1) > > for(i in n) { > > z1 <- rnorm(n,mean=400, sd=70) > > z2 <- rnorm(n,mean=450, sd=90) > > cor <- runif(1,min=0.4, max=0.6) > > X <- z1 > > Y = cor*z1+(1-cor)*z2 > > mat1 <- cbind(X,Y) > > dev1 <- sample(-40:40, 1, replace=T) > > cut1 <- mean(X) + dev1 > > dev2 <- sample(12:54, 1, replace=T) > > cut2 <- mean(X) + dev1 + dev2 > > X2 <- X-cut1 > > Y2 <- Y-cut2 > > c3 <- cor(X2,Y2) > > mat2 <-cbind(X2,Y2) > > a11 <- ifelse( X < cut1 & Y < cut2, 1, 0) > > a12 <- ifelse( X < cut1 & Y >= cut2, 1, 0) > > a21 <- ifelse( X >= cut1 & Y < cut2, 1, 0) > > a22 <- ifelse( X >= cut1 & Y >= cut2, 1, 0) > > mat3 <-matrix(c(sum(a11),sum(a21), sum(a12),sum(a22)), nrow = 2) > > mat4 <-matrix(c(sum(a11),sum(a22), sum(a12),sum(a21)), nrow = 2) > > out3a <- mcnemar.test(mat3, correct=FALSE) > > out3b <- mcnemar.test(mat3, correct=TRUE) > > out4a <- chisq.test(mat4, correct = FALSE) > > out4b <- chisq.test(mat4, correct = TRUE) > > print(mat1) > > print(mat2) > > print(cut1) > > print(cut2) > > print(mat3) > > print(out3a) > > print(out3b) > > print(mat4) > > print(out4a) > > print(out4b) > > } > > . Use list structure for keeping such results. lll<-list() for(j in 1:5) { lll[[j]] <- list() for( i in 1:3) lll[[j]][[i]]<-rnorm(10) } after population of a list you can print it as a whole or only part. Here is an example with your code. n <- seq(5,10,by=1) lll <- vector(mode = "list", length = 10) names(lll) <- c("mat1", "mat2", "mat3", "mat4", "cut1", "cut2", "out3a", "out3b", "out4a", "out4b") n <- seq(5,10,by=1) for(i in n) { z1 <- rnorm(n,mean=400, sd=70) z2 <- rnorm(n,mean=450, sd=90) cor <- runif(1,min=0.4, max=0.6) X <- z1 Y = cor*z1+(1-cor)*z2 lll[["mat1"]] <- cbind(X,Y) dev1 <- sample(-40:40, 1, replace=T) lll[["cut1"]] <- mean(X) + dev1 dev2 <- sample(12:54, 1, replace=T) lll[["cut2"]] <- mean(X) + dev1 + dev2 X2 <- X-cut1 Y2 <- Y-cut2 c3 <- cor(X2,Y2) lll[["mat2"]] <-cbind(X2,Y2) a11 <- ifelse( X < cut1 & Y < cut2, 1, 0) a12 <- ifelse( X < cut1 & Y >= cut2, 1, 0) a21 <- ifelse( X >= cut1 & Y < cut2, 1, 0) a22 <- ifelse( X >= cut1 & Y >= cut2, 1, 0) lll[["mat3"]] <-matrix(c(sum(a11),sum(a21), sum(a12),sum(a22)), nrow = 2) lll[["mat4"]] <-matrix(c(sum(a11),sum(a22), sum(a12),sum(a21)), nrow = 2) lll[["out3a"]] <- mcnemar.test(mat3, correct=FALSE) lll[["out3b"]] <- mcnemar.test(mat3, correct=TRUE) lll[["out4a"]] <- chisq.test(mat4, correct = FALSE) lll[["out4b"]] <- chisq.test(mat4, correct = TRUE) } print(lll) > > Other than the sample size of the random draws I would like to nest for > loops for cor, dev1, and dev2 according to the following sequences > respectively: > > cor <- seq(-0.5,0.5, by=0.25) do not use floating points in cycle. better to use for (k in 1:n) { cc <- cor[k] make computation with cc } > > dev1 <- seq(-100,100, by=10) > > dev2 <- seq(12,54, by=10) > > . > > After doing so I would like to put each matrix and their respective > tests into a text file so that I can examine the results. I would like > to put the results in a .txt file each time the loop finishes one case. > I would like to append this text file with subsequent matrices and > results rendered by each iteration of the nested for loop. I have seen > some very nice examples of output that R can render. I would like to > simply display each matrix and their tests. maybe R2HTML or latex in Hmisc package can Regards Petr > > Thank you to all the teachers and students on this forum. The only > reason I have been able to craft this inquiry is due to the questions > and answers I have found through searching the archive. Thank you > kindly for your assistance and for freely sharing your knowledge. > > Best wishes, > Thomas > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org<mailto: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. [[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.