日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

R語言apply系列函數實例詳解_R語言

作者:Bio大恐龍 ? 更新時間: 2022-12-29 編程語言

前言

在R語言中,apply系列函數可以對向量、矩陣、數據框一次性對整體數據應用函數運算,非常方便

一、apply()函數

定義:apply()函數按矩陣的行或列方向應用指定函數。

apply(
  x # 數組或矩陣
  MARGIN #應用函數的方向,1行2列 
  FUN # 應用的函數
)
# 返回值根據數據Data的數據類型與Fun的返回值自動判斷返回的數據類型

這里舉個例子:

s <- matrix(1:9,ncol = 3)
apply(s,1,sum)
apply(s,2,sum)

即可得到下列結果:

apply(s,1,sum)
[1] 12 15 18
apply(s,2,sum)
[1] ?6 15 24

在舉一個R語言自帶的鳶尾花數據集例子:

apply(iris[,1:4],2,sum)

結果如下:

apply(iris[,1:4],2,sum)
Sepal.Length ?Sepal.Width Petal.Length ?Petal.Width?
? ? ? ?876.5 ? ? ? ?458.6 ? ? ? ?563.7 ? ? ? ?179.9?

如果小伙伴們對鳶尾花數據集不了解可以輸入iris查看。

于此同時R語言中還定義了rowSums(),rowMeans(),colSums(),colMeans()函數對行列進行求和、均值的函數。使用方式也很簡單。

二、lapply()函數

定義:lapply()函數以列表的形式返回函數的結果

lapply(
? X #向量、列表、表達式、數據庫
? FUN #應用的函數
? ... #額外參數,會被傳遞給fun函數
)

繼續使用鳶尾花數據集舉例:

lapply(iris[,1:4],mean)

結果如下:

lapply(iris[,1:4],mean)
$Sepal.Length
[1] 5.843333

$Sepal.Width
[1] 3.057333

$Petal.Length
[1] 3.758

$Petal.Width
[1] 1.199333

可以看到結果以列表的形式返回,可以使用unlist()函數將結果轉換為向量。

unlist(
  #將列表轉換為向量
  X #R對象
  recursive = FALSE #是否對x中的列表進行遞歸轉換
  use.names = TRUE #是否保留列表中的值名稱
)
unlist(lapply(iris[,1:4],mean))

結果如下所示:

unlist(lapply(iris[,1:4],mean))
Sepal.Length ?Sepal.Width Petal.Length ?Petal.Width?
? ? 5.843333 ? ? 3.057333 ? ? 3.758000 ? ? 1.199333

三、sapply()函數

sapply()函數與lapply()函數類似,其結果以矩陣、向量的數據類型返回。

定義:向列表,向量、表達式數據等應用指定函數,然后以向量或矩陣形式返回結果。

sapply(
? X #向量、列表、表達式、數據庫
? FUN #應用的函數
? ... #額外參數,會被傳遞給fun函數
)

同樣使用鳶尾花數據集作為例子:

sapply(iris[,1:4], sum)

結果如下:

sapply(iris[,1:4], sum)
Sepal.Length ?Sepal.Width Petal.Length ?Petal.Width?
? ? ? ?876.5 ? ? ? ?458.6 ? ? ? ?563.7 ? ? ? ?179.9?

當fun函數只有一個返回值,sapply()函數返回的就是包含這些值的向量。如果fun函數的結果時大于1的向量,則sapply()函數會返回矩陣。

如下例:

x <- sapply(iris[,1:4], function(x) {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->x >3})class(x)

結果如下:

class(x)
[1] "matrix"

數據如下圖所示:

四、tapply()函數

定義:根據給定的標準,對向量中保存的數據進行分組,然后對各分組應用指定函數,并返回結果。

tapply(
? X #向量
? INDEX #數據分組索引
? FUN #應用的函數
? ... #額外參數
)

舉個例子:

tapply(1:10,rep(1:2,5),sum)

結果如下圖:

tapply(1:10,rep(1:2,5),sum)
?1 ?2?
25 30?

例中1:10表示的是數據1到10,rep(1:2,5)表示將1到2重復5次。1,3,5,7,9屬于1分組,2,4,6,8,10屬于2分組。對它們進行求和,得到上訴結果。

以鳶尾花數據集舉例:

tapply(iris$Sepal.Length,iris$Species,sum)

結果如下所示:

tapply(iris$Sepal.Length,iris$Species,sum)
? ? setosa versicolor ?virginica?
? ? ?250.3 ? ? ?296.8 ? ? ?329.4?

建立一個銷售數據:

m <- matrix(1:8,ncol = 2,
            dimnames = list(c("春","夏","秋","冬"),
                            c("female","male")))

對該數據秋上下半年與性別分別秋銷售之和。

代碼如下:

tapply(m, list(c(1,1,2,2,1,1,2,2),
               c(1,1,1,1,2,2,2,2)), sum)

結果如下所示:

tapply(m, list(c(1,1,2,2,1,1,2,2),
+ ? ? ? ? ? ? ? ?c(1,1,1,1,2,2,2,2)), sum)
? 1 ?2
1 3 11
2 7 15

這里是將各個數據的位置建立索引進行分組,而后進行求和。

五、mapply()函數

定義:以列表或向量形式給出的參數傳遞給指定函數,并返回函數執行結果。

mapply(
? FUN #應用的函數
? ... #待傳遞的參數
)

繼續使用鳶尾花數據集舉例(哈哈哈):

mapply(sum,iris[,1:4])

結果如下:

mapply(sum,iris[,1:4])
Sepal.Length ?Sepal.Width Petal.Length ?Petal.Width?
? ? ? ?876.5 ? ? ? ?458.6 ? ? ? ?563.7 ? ? ? ?179.9?

總結

原文鏈接:https://blog.csdn.net/ouyangk1026/article/details/122535256

欄目分類
最近更新