码迷,mamicode.com
首页 > 其他好文 > 详细

R随笔

时间:2016-05-13 13:59:19      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

最近处理了一些数据  发现了写代码过程中值得注意的地方,特别是写循环的时候

1,

trait_data<-numeric()

for(i in 0:(indi_num-1)){
trait_eve<-traitdata[(3*i+1):(3*(i+1))]
trait_data<-rbind(trait_data,trait_eve)
}

for(i in 0:(indi_num-1)){
trait_eve<-matrix(traitdata[(3*i+1):(3*(i+1))],1,)   ### 变成一个矩阵就行并列
trait_data<-rbind(trait_data,trait_eve)
}

这两个循环虽然得到的结果一样,但是前者更容易出错,而且出现这样的一个并列,行名就是一个变量名,这样在读入到你用R写的软件的时候,就只能读出第一行,其他行读不出来

trait_eve 1 0 -1 -1 -1 -1 1 -1 1 -1 1 1 1 -1 -1 1 1 1 1 1

 trait_eve 1 5 -1 -1 -1 -1 1 -1 1 1 1 1 1 -1 -1 1 1 1 1 1

而后者的循环的结果

[1,] 1 0 -1 -1 -1 -1 1 -1 1 -1 1 1 1 -1 -1 1 1 1 1 1
[2,] 1 5 -1 -1 -1 -1 1 -1 1 1 1 1 1 -1 -1 1 1 1 1 1

这样的结果就不会出现上面的情况,是正确的结果

 

2,

trait_num<-3

indi_num<-50

trait_data<-numeric()

trait_indidata<-numeri()

for(i in 1:trait_num){
for(j in 1:indi_num){
trait_cc<-traitdata[(i+trait_num*j)]
trait_indidata<-rbind(trait_indidata,trait_cc)##取一个性状数的所有数值

}

trait_data<-cbind(trait_data,trait_indidata)

}

这个循环结果是得到trait_data为 100,1的一个矩阵,并没有得到一个50,3的矩阵,因为在i=1的时候你对这个trait_indidata赋值第一列的数据trait_data[1],此时,在i=2的时候,你在之前的基础上又给第二列的数据加上去,trait_data<-cbind(trait_data[1],trait_indidata[1,2]),因此会报出行数不对的错误。

 

 

trait_num<-3

indi_num<-50

trait_data<-numeric()

for(i in 1:trait_num){
trait_indidata<-numeri()
for(j in 1:indi_num){
trait_cc<-traitdata[(i+trait_num*j)]
trait_indidata<-rbind(trait_indidata,trait_cc)##取一个性状数的所有数值

}


trait_data<-cbind(trait_data,trait_indidata)

}

这个才是 你想要的结果得到50,3的一个矩阵,在循环一次i后trait_indidata就会清0得到一列的矩阵,再把这样一列一列的矩阵并起来

R随笔

标签:

原文地址:http://www.cnblogs.com/yupeter007/p/5487595.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!