R:在循环中分配值,否则为

时间:2016-05-02 03:50:55

标签: arrays r list if-statement

此线程之前已在R loop and if else中通过示例进行了讨论。在这里,我给出了一个可重现的代码:

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]

} }

我现在得到结果:

> Sui_Q1
 [[1]]
 NULL

 [[2]]
 NULL

 [[3]]
 NULL

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

我希望得到:

> 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

这有什么问题?

1 个答案:

答案 0 :(得分:1)

Sui_Q1<- list()不止一次写入。它导致list()覆盖。解决方案只是在循环之前放置Sui_Q1<- list()Sui_Q2<-list()

相关问题