R語言之for迴圈

2021-10-06 01:49:33 字數 4135 閱讀 1652

程式示例

資料集:

id       t1        t2        t3

1 1 52.56441 10.074323 -18.81786

2 1 50.18791 10.058374 -18.30228

3 1 47.68246 10.476636 -21.96603

4 1 48.52158 10.005308 -20.05809

5 1 53.18525 11.335882 -16.52016

6 1 49.73335 9.845289 -17.75557

t1、t2、t3分別表示模型的引數,我們的目的是根據模型引數還原出原始資料,每乙個id對於36次重複測量,即生成83行,36列的乙個資料集。以id=1為例,將引數帶入模型中,共進行36次計算,每次計算代入的t值不同,t=1:36;已知資料集共有83個受試個體,遍歷83次。

raneff<-read.csv("f:/sas9.4/sas.data/newphyscial.csv")

y<-data.frame(matrix(numeric(0),ncol=36))

ycolnames(y)<-paste0("t",1:36)

f1<-vector()

for(i in 1:nrow(raneff))

vr=matrix(f1,ncol=1)

y[i,]=vr

}y<-round(y,2)

head(y)

首先,建立乙個空的資料框,36列,建立f1向量,i從1遍歷資料集的所有行數,t從1:36,進行36次重複測量。迴圈為巢狀迴圈。f1[t]表示第i個個體的第t次迴圈,轉換為矩陣形式,生成vr為36乘1的乙個矩陣,y[i,]=vr表示將矩陣進行轉置,即第i個個體的36次重複測量,矩陣維數1乘36。

vr如下:

[,1]

[1,] 56.57178

[2,] 59.98135

[3,] 62.98855

[4,] 65.65770

[5,] 68.04284

[6,] 70.18936

[7,] 72.13540

[8,] 73.91301

[9,] 75.54912

[10,] 77.06633

......

y[i,]如下:

t1    t2    t3    t4    t5    t6    t7    t8    t9

83 56.57 59.98 62.99 65.66 68.04 70.19 72.14 73.91 75.55

t10 t11 t12 t13 t14 t15 t16 t17 t18

83 77.07 78.48 79.82 81.08 82.28 83.44 84.55 85.63 86.67

t19 t20 t21 t22 t23 t24 t25 t26 t27

83 87.7 88.7 89.68 90.65 91.61 92.56 93.49 94.43 95.35

t28 t29 t30 t31 t32 t33 t34 t35 t36

83 96.27 97.18 98.1 99 99.91 100.81 101.72 102.62 103.52

結果:head(y)

t1    t2    t3    t4    t5    t6    t7    t8    t9

1 56.41 59.78 62.74 65.36 67.70 69.80 71.70 73.43 75.01

2 53.95 57.25 60.15 62.72 65.02 67.08 68.95 70.65 72.22

3 52.07 55.89 59.24 62.20 64.82 67.16 69.27 71.18 72.92

4 52.56 56.09 59.19 61.92 64.35 66.53 68.49 70.27 71.90

5 56.77 59.93 62.74 65.25 67.51 69.56 71.44 73.16 74.76

6 53.39 56.60 59.42 61.92 64.16 66.17 67.99 69.64 71.17

......

重點在於首先建立乙個空矩陣及空向量用於存放資料,

之後for迴圈得出結果。注意y[i,]和vr的轉換,相當於進行轉置,維數為36乘1的矩陣轉換為1乘36的矩陣。

根據上述迴圈思維,將如下歸一化處理利用迴圈方式得到。**「jiyang_1」

#對輸入矩陣進行歸一化處理(0到1)

b1=(p[,1]-min(p[,1]))/(max(p[,1])-min(p[,1]))

b2=(p[,2]-min(p[,2]))/(max(p[,2])-min(p[,2]))

b3=(p[,3]-min(p[,3]))/(max(p[,3])-min(p[,3]))

b4=(p[,4]-min(p[,4]))/(max(p[,4])-min(p[,4]))

b5=(p[,5]-min(p[,5]))/(max(p[,5])-min(p[,5]))

b6=(p[,6]-min(p[,6]))/(max(p[,6])-min(p[,6]))

b7=(p[,7]-min(p[,7]))/(max(p[,7])-min(p[,7]))

b8=(p[,8]-min(p[,8]))/(max(p[,8])-min(p[,8]))

b9=(p[,9]-min(p[,9]))/(max(p[,9])-min(p[,9]))

b10=(p[,10]-min(p[,10]))/(max(p[,10])-min(p[,10]))

p0=cbind(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10)#歸一化後的資料放入矩陣中

for迴圈**:

y<-data.frame(matrix(numeric(0),nrow=11))

yf1<-vector()

for(i in 1:10)

class(y)

y

與之前例子不同的是該迴圈不是巢狀迴圈形式,只涉及i,建立乙個11行的空矩陣,f1輸出為11乘1的矩陣,用vr表示。將vr中資料填入空矩陣中,這裡需注意:未進行之前所述的轉置。y[i,]同為11乘1的矩陣。

輸出結果:

y

v1 v2 v3 v4 v5

1 0.00000000 0.00000000 0.00000000 0.0000000 0.0000000

2 0.05106965 0.07990388 0.07519758 0.0673893 0.1302504

3 0.11883606 0.17730150 0.16540037 0.1599639 0.2265402

4 0.19960896 0.26705204 0.25427761 0.2433822 0.3156171

5 0.30552268 0.30401298 0.28692703 0.3077170 0.3851269

6 0.44355912 0.41296346 0.41484978 0.4065333 0.4842289

7 0.51771847 0.53776316 0.53700843 0.5323744 0.5474059

8 0.60402497 0.60535358 0.58161768 0.6223840 0.5806367

9 0.72808887 0.73977011 0.73251601 0.7357412 0.7671696

10 0.85873195 0.86550453 0.86138710 0.8629827 0.8812187

11 1.00000000 1.00000000 1.00000000 1.0000000 1.0000000

v6 v7 v8 v9 v10

......

如需修改列名,可用colnames命令

R語言之迴圈控制語句

r程式語言提供以下種類的迴圈來處理迴圈需求。單擊以下鏈結以檢查其詳細資訊。r語言的for迴圈支援任何向量 注意,是向量 無論向量是任何模式 sr.no.迴圈型別和描述 1repeat迴圈 多次執行一系列語句,並簡化管理迴圈變數的 2while迴圈 在給定條件為真時,重複語句或語句組。它在執行迴圈體之...

R語言 迴圈

迴圈語句允許我們多次執行乙個語句或一組語句 1.repeat迴圈 repeat迴圈重複執行相同的 直到滿足停止條件。repeat迴圈 v c hello loop cnt 2 repeat 2.while迴圈 while迴圈一次又一次地執行相同的 直到滿足停止條件。while迴圈的關鍵點是迴圈可能永...

R語言之OOP篇

setclass passenger representation name character origin character destination character 定義類passenger setclass freqflyer representation ffnumber numeri...