跳轉至內容

R 程式設計/高階程式設計

來自華夏公益教科書,開放的書籍,開放的世界

條件執行

[編輯 | 編輯原始碼]
  • 程式設計幫助 
> ?Control

if接受一維條件。

if (condition){
     statement  
     } 
else {
     alternative
    }

ifelse()命令將條件作為第一個引數,如果條件為真則將處理作為第二個引數,如果條件為假則將處理作為第三個引數。在這種情況下,條件可以是向量。例如,我們生成一個從 1 到 10 的序列,我們想要顯示小於 5 且大於 8 的值。

> x <- 1:10 
> ifelse(x<5 | x>8, x, 0)
 [1]  1  2  3  4  0  0  0  0  9 10

R 提供三種編寫迴圈的方法:for、repeat 和 while。該for語句非常簡單。您只需定義索引 (此處為 k) 和向量 (在下面的示例中,向量為 1:5),然後您指定要在花括號之間執行的操作。

> for (k in 1:5){
+ print(k)
+ }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

當無法使用 for 語句時,您也可以透過指定中斷規則來使用 break 或 while。 對於這種迴圈要小心,因為如果中斷規則指定錯誤,迴圈將永遠不會結束。 在下面的兩個示例中,只要值小於 1,就會繪製標準正態分佈。 cat() 函式用於在螢幕上顯示當前值。

> repeat { 
+ 	g <- rnorm(1) 
+ 	if (g > 1.0) break 
+ 	cat(g,"\n")
+ 	} 
-1.214395 
0.6393124 
0.05505484 
-1.217408 
> g <- 0
> while (g < 1){
+ 	g <- rnorm(1) 
+ 	cat(g,"\n")
+ 	}
-0.08111594 
0.1732847 
-0.2428368 
0.3359238 
-0.2080000 
0.05458533 
0.2627001 
1.009195

隱式迴圈

[編輯 | 編輯原始碼]

迴圈通常很慢,最好在可能的情況下避免它們。

  • apply()可以將函式應用於矩陣或陣列的元素。 這可能是矩陣的行 (1) 或列 (2)。
  • lapply()將函式應用於資料框的每一列並返回一個列表。
  • sapply()類似,但輸出簡化了。 它可能是向量或矩陣,具體取決於函式。
  • tapply()對因子的每個級別應用函式。
> N <- 10
> x1 <- rnorm(N)
> x2 <- rnorm(N) + x1 + 1
> male <- rbinom(N,1,.48)
> y <- 1 + x1 + x2 + male + rnorm(N)
> mydat <- data.frame(y,x1,x2,male)
> lapply(mydat,mean) # returns a list
$y
[1] 3.247

$x1
[1] 0.1415

$x2
[1] 1.29

$male
[1] 0.5

> sapply(mydat,mean) # returns a vector
     y     x1     x2   male 
3.2468 0.1415 1.2900 0.5000 
> apply(mydat,1,mean) # applies the function to each row
 [1]  1.1654  2.8347 -0.9728  0.6512 -0.0696  3.9206 -0.2492  3.1060  2.0478  0.5116
> apply(mydat,2,mean) # applies the function to each column
     y     x1     x2   male 
3.2468 0.1415 1.2900 0.5000 
> tapply(mydat$y,mydat$male,mean) # applies the function to each level of the factor
    0     1 
1.040 5.454 
  • 另請參閱aggregate()類似於tapply()但應用於資料框而不是向量。

迭代器

[編輯 | 編輯原始碼]



參考文獻

[編輯 | 編輯原始碼]
上一個:隨機數生成 索引 下一個:資料管理
華夏公益教科書