R 程式設計/高階程式設計
外觀
< 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()但應用於資料框而不是向量。
- R 中的迴圈通常很慢。迭代器可能比迴圈更有效。 檢視 Revolution Computing 部落格 中的此條目。
