R control structure types

  • conditional execution
    • if(condition){expression1} else{expression2}
    • ifelse(condition, expression1, expression2)
  • loops
    • repeat{ statements }
    • while(condition){ statements }
    • for(index in object){ statements }
    • (i)break: The keyword break breaks at once and exits from the loop.
    • (ii)next: The keyword next jumps to the start of the next iteration in the loop
  • apply family
    • apply(): applying functions on matrices or arrays
    • lapply()
    • sapply()
    • tapply()

apply family

函数 作用
apply(x,i,f) 针对数据框(x)来说, 对各行(i = 1)或者各列(i = 2)进行(f)算法处理
lapply(x,f) 针对列表(x)中的各个要素就行算法(f)处理, 结果以列表返还
sapply(x,f) 针对列表(x)中的各个要素就行算法(f)处理, 结果以矢量返还

apply

对数组或者矩阵的一个维度使用函数生成值得到列表, 数组或者向量

apply(X, MARGIN, FUN, ...)

  X: an array, including a matrix
  MARGIN: 1 (rows), 2 (columns), c(1, 2) (rows and columns)    
  FUN: Functions

计算按照行(1)或列(2)的方式进行。
如果apply函数命令应用到矩阵的每一个与元素上时,函数的运算顺序为:从第一列第一个数值到第一列最后一个数值,再从第一列到最后一列的顺序。请小伙伴们注意,这是函数的运算顺序。运算之后我们有了对矩阵全部数据的运算结果,结果排序为:当向量值为1的时候,每一列的运算结果变成新的一行,即第一列的运算结果变为第一行,第二列的运算结果变为第二行,以此类推直到最后一列的运算结果变为最后一行。

m <- matrix(1:16, nrow = 4)
apply(m, 1, sqrt)
##          [,1]     [,2]     [,3]     [,4]
## [1,] 1.000000 1.414214 1.732051 2.000000
## [2,] 2.236068 2.449490 2.645751 2.828427
## [3,] 3.000000 3.162278 3.316625 3.464102
## [4,] 3.605551 3.741657 3.872983 4.000000
apply(m, 2, sqrt)
##          [,1]     [,2]     [,3]     [,4]
## [1,] 1.000000 2.236068 3.000000 3.605551
## [2,] 1.414214 2.449490 3.162278 3.741657
## [3,] 1.732051 2.645751 3.316625 3.872983
## [4,] 2.000000 2.828427 3.464102 4.000000

lapply

通过对x的每一个元素运用函数,生成一个与元素个数相同的值列表

sapply

是lapply 函数的包装版, 该函数返回结果是向量或者矩阵, 如果simplify=”array”, 且合适的情况下, 将会通过 simplify2array() 函数转换为阵列

ifelse

ifelse() can be nested in many ways:

ifelse(<condition>, <yes>, <no>)         

ifelse(<condition>, <yes>, ifelse(<condition>, <yes>, <no>))

ifelse(<condition>, ifelse(<condition>, <yes>, <no>), <no>)

ifelse(<condition>, 
       ifelse(<condition>, <yes>, <no>), 
       ifelse(<condition>, <yes>, <no>)
      )

ifelse(<condition>, <yes>, 
       ifelse(<condition>, <yes>, 
              ifelse(<condition>, <yes>, <no>)
             )
       )