R:在循环和否则,如果指定值 [英] R : assigning value in looping and else if

查看:107
本文介绍了R:在循环和否则,如果指定值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这线程previously从<一个讨论href=\"http://stackoverflow.com/questions/36974450/r-loop-and-if-else?noredirect=1#comment61504739_36974450\">R循环和举例来说,如果其他。这里我给一个可重复code:

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]

}
}

} }

和我现在得到的结果:

> 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

这有什么错呢?

推荐答案

Sui_Q1&LT; - 列表()写入不止一次。这导致()的列表覆盖。该解决方案是唯一的 Sui_Q1&LT放; - 列表() Sui_Q2&LT; -list()循环前

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.

这篇关于R:在循环和否则,如果指定值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆