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 博客 中的此条目。
