2022年5月25日星期三

R in Action chapter5.2 其他实用函数 & 将函数应用于矩阵和数据框

其他实用函数

本部分主要设计一个对于管理数据和处理同样非常实用的函数,只是它们无法清楚地划入其他分类中

表5-7 其他实用函数

函数描述示例
length(x)对象x的长度x <- c(2, 5, 6, 9) length(x)返回值为4
seq(from, to, by)生成一个序列indices <- seq(1, 10, 2) indices的值为c(1, 3, 5, 7, 9)
rep(x, n)将x重复n次rep(1:3, 2)返回的值为c(1, 2, 3, 1, 2, 3)
cut(x, n)将连续性变量x分割为有着n个水平的因子,使用选项ordered_result = TRUE可以创建一个有序型因子
pretty(x, n)创建美观的分割点。 通过选取n+1个等间距的区整值,将一个连续性变量x分割为n个区间。 绘图中常用
cat(…, file = "myfile", append = FALSE)连接…中的对象,并将其输出到屏幕上或文件中(如果声明了一个的话)firstname <- c("Jane") cat("Hello", firstname, "\n")

将函数应用于矩阵和数据框

R函数的诸多有趣特性之一,就是它们可以应用到一系列的数据对象向,包括标量、向量、矩阵、数组和数据框

#代码清单5-4 将行数应用于对象
a <- 5
sqrt(5)
b <-c(1.243, 5.654, 2.99)
round(b)
c <- matrix(runif(12), nrow(3))
c
log(c)
mean(c)

注意上述代码示例中的函数mean(c)得到的记过是全部12个元素,那么如果我们相对各行、各列求均值应该如何操作呢?

apply(x, MARGIN, Fun, ...)

apply()函数可以将任一函数"应用"到矩阵、数组、数据框的任何维度上

  • x为数据对象

  • MARGIN是维度的下标,在矩阵或数据框中,MARGIN = 1表示行,MARGIN=2表示列

  • FUN是由你指定的函数

  • ...包含了任何想传递给FUN的参数

#代码清单5-5 将一个函数应用到矩阵的所有行(列)
mydata <- matrix(rnorm(30), nrow = 6)
mydata
apply(mydata, 1, mean)
apply(mydata, 2, mean)
apply(mydata, 2, mean, trim = 0.2)

没有评论: