简体   繁体   中英

R : assigning value in looping and else if

This thread was previously discussed from R loop and if else with example. here I give a reproducible code :

n = 4
a=0
b=0
c=0
d=0
e=0
f=0
g=0
h=0

Sui_Q1_STS<-0
Sui_Q1_TS<-0
Sui_Q1_S<-0
Sui_Q1_SS<-0
Sui_Q2_STS<-0
Sui_Q2_TS<-0
Sui_Q2_S<-0
Sui_Q2_SS<-0
for (i in 1:n){

if(i%%4==1)
 {
  a<-1
  b<-2
  c<-3
  d<-4
  e<-5
  f<-6
  g<-7
  h<-8
  Sui_Q1_STS[i]<-as.numeric(a)
  Sui_Q1_TS[i]<-as.numeric(b)
  Sui_Q1_S[i]<-as.numeric(c)
  Sui_Q1_SS[i]<-as.numeric(d)
  Sui_Q2_STS[i]<-as.numeric(e)
  Sui_Q2_TS[i]<-as.numeric(f)
  Sui_Q2_S[i]<-as.numeric(g)
  Sui_Q2_SS[i]<-as.numeric(h)


Sui_Q1<-list()
Sui_Q1[[i]]<-cbind(Sui_Q1_STS[i],Sui_Q1_TS[i],Sui_Q1_S[i],Sui_Q1_SS[i])
Sui_Q2<-list()
Sui_Q2[[i]]<-cbind(Sui_Q2_STS[i],Sui_Q2_TS[i],Sui_Q2_S[i],Sui_Q2_SS[i])
Total[i]<-Sui_Q1[[i]][,1]+Sui_Q1[[i]][,2]+Sui_Q1[[i]][,3]+Sui_Q1[[i]][,4]
}
else if(i%%4==2){

a<-11
b<-22
c<-33
d<-44
e<-55
f<-66
g<-77
h<-88

Sui_Q1_STS[i]<-as.numeric(a)
Sui_Q1_TS[i]<-as.numeric(b)
Sui_Q1_S[i]<-as.numeric(c)
Sui_Q1_SS[i]<-as.numeric(d)
Sui_Q2_STS[i]<-as.numeric(e)
Sui_Q2_TS[i]<-as.numeric(f)
Sui_Q2_S[i]<-as.numeric(g)
Sui_Q2_SS[i]<-as.numeric(h)


Sui_Q1<-list()
Sui_Q1[[i]]<-cbind(Sui_Q1_STS[i],Sui_Q1_TS[i],Sui_Q1_S[i],Sui_Q1_SS[i])
Sui_Q2<-list()
Sui_Q2[[i]]<-cbind(Sui_Q2_STS[i],Sui_Q2_TS[i],Sui_Q2_S[i],Sui_Q2_SS[i])
Total[i]<-Sui_Q1[[i]][,1]+Sui_Q1[[i]][,2]+Sui_Q1[[i]][,3]+Sui_Q1[[i]][,4]
}
else if(i%%4==3){

a<-111
b<-222
c<-333
d<-444
e<-555
f<-666
g<-777
h<-888

Sui_Q1_STS[i]<-as.numeric(a)
Sui_Q1_TS[i]<-as.numeric(b)
Sui_Q1_S[i]<-as.numeric(c)
Sui_Q1_SS[i]<-as.numeric(d)
Sui_Q2_STS[i]<-as.numeric(e)
Sui_Q2_TS[i]<-as.numeric(f)
Sui_Q2_S[i]<-as.numeric(g)
Sui_Q2_SS[i]<-as.numeric(h)


Sui_Q1<-list()
Sui_Q1[[i]]<-cbind(Sui_Q1_STS[i],Sui_Q1_TS[i],Sui_Q1_S[i],Sui_Q1_SS[i])
Sui_Q2<-list()
Sui_Q2[[i]]<-cbind(Sui_Q2_STS[i],Sui_Q2_TS[i],Sui_Q2_S[i],Sui_Q2_SS[i])
Total[i]<-Sui_Q1[[i]][,1]+Sui_Q1[[i]][,2]+Sui_Q1[[i]][,3]+Sui_Q1[[i]][,4]
}
else if(i%%4==0){

a<-1111
b<-2222
c<-3333
d<-4444
e<-5555
f<-6666
g<-7777
h<-8888

Sui_Q1_STS[i]<-as.numeric(a)
Sui_Q1_TS[i]<-as.numeric(b)
Sui_Q1_S[i]<-as.numeric(c)
Sui_Q1_SS[i]<-as.numeric(d)
Sui_Q2_STS[i]<-as.numeric(e)
Sui_Q2_TS[i]<-as.numeric(f)
Sui_Q2_S[i]<-as.numeric(g)
Sui_Q2_SS[i]<-as.numeric(h)


Sui_Q1<-list()
Sui_Q1[[i]]<-cbind(Sui_Q1_STS[i],Sui_Q1_TS[i],Sui_Q1_S[i],Sui_Q1_SS[i])
Sui_Q2<-list()
Sui_Q2[[i]]<-cbind(Sui_Q2_STS[i],Sui_Q2_TS[i],Sui_Q2_S[i],Sui_Q2_SS[i])
Total[i]<-Sui_Q1[[i]][,1]+Sui_Q1[[i]][,2]+Sui_Q1[[i]][,3]+Sui_Q1[[i]][,4]

} }

and I now get result :

> Sui_Q1
 [[1]]
 NULL

 [[2]]
 NULL

 [[3]]
 NULL

 [[4]]
     [,1] [,2] [,3] [,4]
 [1,] 1111 2222 3333 4444

I expect to get :

> Sui_Q1
[[1]]
  [,1] [,2] [,3] [,4]
[1,] 1   2    3    4

[[2]]
    [,1] [,2] [,3] [,4]
[1,] 11   22   33   44

[[3]]
  [,1] [,2] [,3] [,4]
[1,] 111 222 333 444

[[4]]
     [,1] [,2] [,3] [,4]
[1,] 1111 2222 3333 4444

What's wrong with this?

Sui_Q1<- list() is written more than once. it cause the list() to override. The solution is only to put Sui_Q1<- list() and Sui_Q2<-list() before looping.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM