跳转至内容

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()但应用于数据框而不是向量。

迭代器

[编辑 | 编辑源代码]



参考文献

[编辑 | 编辑源代码]
上一个:随机数生成 索引 下一个:数据管理
华夏公益教科书