-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
project.org] On Behalf Of staysafe23
Sent: Friday, February 01, 2013 1:01 AM
To: r-help at 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]]