R語言中dim函數_R語言--向量化計算(apply族函數)

61ec11791641ff5d0f52ffdae3e83048.png
R語言最優秀的是它的向量化編程,這其中apply族函數扮演了非常重要的角色。apply族函數是由apply、sapply、lapply、mapply、tapply等函數組成的。熟練使用apply族函數,能夠簡化程序,提高代碼的運算速度。

軟件&環境

  • win10 64bit
  • R 3.6.1

apply

apply是最基本的函數。為了方便演示,選取了R自帶的數據框mtcars的前4行和前5列,并賦值給data。a1返回的結果是data數據每一行的和,由于每行都有一個和,所以a1是4個元素組成的數值向量。a2返回的結果是data數據每一列的均值,同樣,a2是5個元素組成的數值向量。

# 獲取內置數據
data <- mtcars[1:4,1:5]
print(data)
##                 mpg cyl disp  hp drat
## Mazda RX4      21.0   6  160 110 3.90
## Mazda RX4 Wag  21.0   6  160 110 3.90
## Datsun 710     22.8   4  108  93 3.85
## Hornet 4 Drive 21.4   6  258 110 3.08
# 對數據框每行求和
a1 <- apply(data,1,sum)
print(a1)
##      Mazda RX4  Mazda RX4 Wag     Datsun 710 Hornet 4 Drive 
##         300.90         300.90         231.65         398.48
# 對數據框每列求均值
a2 <- apply(data,2,mean)
print(a2)
##      mpg      cyl     disp       hp     drat 
##  21.5500   5.5000 171.5000 105.7500   3.6825

apply函數的第一個參數表示數據,第二個參數表示維度(1表示行,2表示列),第三個參數表示在維度上操作的函數。需要注意的是第三個參數,用作演示的函數是R自帶的函數(sum、mean),當然,這里也可以是自己定義的函數。

# 自定義函數(求極差)
func <- function(x){result <- diff(range(x))return(result)
}
# 對數據框每列求極差
a3 <- apply(data,2,func)
print(a3)
##    mpg    cyl   disp     hp   drat 
##   1.80   2.00 150.00  17.00   0.82

sapply

sapply的用法比apply要更靈活一些,同樣,用data做演示。計算數據框data每列的數據范圍,用sapply進行計算,返回的結果存儲在s1里,sapply第一個參數是需要計算的數據框,第二個參數是函數,第三個參數simplify=T(默認)代表返回的結果簡化表示,s1的數據格式為矩陣。

s1 <- sapply(data,range,simplify = T)
class(s1)
## [1] "matrix"

如果不想讓計算的結果自動合并成矩陣,可以設置simplify=F,將返回一個列表,列表的每個組件包含了data數據框每列的range函數計算結果。

s2 <- sapply(data,range,simplify = F)
class(s2)
## [1] "list"

sapply一個更常見的用法是針對列表的組件進行操作。例如有n個數據框,對每個數據框都要進行相同的操作,常規方法用循環遍歷,但操作體驗差,速度慢,更優的解決方案是:先對單個數據框定義處理函數,然后用sapply對所有數據框采取相同操作

# 定義一個數據框組成的list
df_list <- list(a=mtcars[1:3,1:4],b=airquality[1:3,1:4],c=iris[1:3,1:4])
# 自定義函數(求數據框歐氏距離的最大值)
max_func <- function(x){d <- dist(x,p=2)return(max(d))
}
# sapply對每個數據框計算
s3 <- sapply(df_list,max_func)
print(s3)
##          a          b          c 
## 54.7744466 72.3488770  0.5385165

lapply

lapply的用法與sapply基本相同,只不過返回的結果是以list儲存的。

# 求每一列的均值
l1 <- lapply(data,mean) 
print(l1)
## $mpg
## [1] 21.55
## 
## $cyl
## [1] 5.5
## 
## $disp
## [1] 171.5
## 
## $hp
## [1] 105.75
## 
## $drat
## [1] 3.6825
class(l1)
## [1] "list"

mapply

mapply在sapply和lapply的基礎上進行了拓展,可以應用在多個變量上。a、b、c三個數值向量,第一次需要計算1*2*3,第二次需要計算2*3*4,...,以此類推。當需要每次變化的變量有多個時,用mapply計算更方便快捷。

a <- 1:5
b <- 2:6
c <- 3:7
m1 <- mapply(prod,a,b,c)
print(m1)
## [1]   6  24  60 120 210

tapply

tapply主要用在分組計算上。分組計算是常見的數據處理操作,能夠處理分組計算的函數也不少,tapply的優勢是簡單便捷。

# 數據框
group_df <- data.frame(value=1:6,label=rep(c("a","b"),3,each=1))
print(group_df)
##   value label
## 1     1     a
## 2     2     b
## 3     3     a
## 4     4     b
## 5     5     a
## 6     6     b
# 按照label分組計算value和
t1 <- tapply(X =group_df$value,INDEX = group_df$label,sum)
print(t1)
##  a  b 
##  9 12

http://weixin.qq.com/r/mShLU4rECNd3rc4w932L (二維碼自動識別)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533923.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533923.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533923.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php+mysql記事本_一個簡單記事本php操作mysql輔助類創建

//SqlHelper.class.phpconnmysql_connect($this->host,$this->user,$this->passwrd); if(!$this->conn){ die("連接失敗".mysql_error()); } mysql_select_db($this->db); mysql_query("set names utf8"); } //增刪改 function execute_dml…

python init方法做了什么_Python類方法、__new__方法和__init__方法分別是什么

Python類方法、__new__方法和__init__方法分別是什么發布時間&#xff1a;2020-09-03 15:24:06來源&#xff1a;億速云閱讀&#xff1a;104作者&#xff1a;小新這篇文章主要介紹Python類方法、__new__方法和__init__方法分別是什么&#xff0c;文中介紹的非常詳細&#xff0c;…

谷歌瀏覽器中文版_中國科學家設計超薄指尖傳感器,厚度不到A4紙五分之一 / 谷歌發布地圖時光機:百年前,你家街道啥樣?/ AI看圖說話首超人類...

關注我們了解計算機視覺最新動態 &#xff01;動態先覽1中國科學家設計超薄指尖傳感器&#xff0c;厚度不到A4紙五分之一2谷歌發布地圖「時光機」&#xff1a;100年前&#xff0c;你家街道長啥樣&#xff1f;3仿真環境跟車2分鐘&#xff0c;就讓自動駕駛系統撞上馬路牙子&#…

300小時成為java程序員_直擊面試現場: Java程序員3輪6小時面試, 成功拿到阿里offer!...

原標題&#xff1a;直擊面試現場: Java程序員3輪6小時面試, 成功拿到阿里offer!今天給大家分享一位Java程序員小伙去阿里應聘的經歷&#xff01;從Java開發要掌握的技術來講&#xff0c;前面已經說得差不多了。我主要想從面試者的角度談一談看法。如果是我面試&#xff0c;就給…

python 判斷每月最后一天_python獲取某年中每個月的第一天和最后一天的兩種方法...

搜索關鍵字&#xff1a;python get every first day of month參考解答&#xff1a;方法一&#xff1a;>>> import calendar>>> calendar.monthrange(2002,1)(1, 31)>>> calendar.monthrange(2008,2)(4, 29)>>> calendar.monthrange(2100,2…

anaconda python3.8目錄_MacBook Pro 安裝anaconda、配置環境

新入手了MacBook Pro&#xff0c;iOS系統還不算非常熟練...作為一個新手程序員&#xff0c;在python開發道路上的學習就從安裝環境開始吧&#xff1a;1、下載安裝包2、安裝過程一路同意or繼續...不過&#xff0c;mac上彈出不允許在當前路徑安裝&#xff0c;那么選擇自定義安裝路…

中國網建java發送短信_短信驗證登陸-中國網建提供的SMS短信平臺

一、JAVA發送手機短信常見的有三種方式(如下所列)&#xff1a;使用webservice接口發送手機短信,這個可以使用sina提供的webservice進行發送,但是需要進行注冊使用短信mao的方式進行短信的發送,這種方式應該是比較的常用,前提是需要購買硬件設備。二、一下整理了SMS短信驗證過程…

stm32外部中斷_STM32學習筆記 | 電源管理及低功耗設計要點

一款好的電子產品&#xff0c;都需要認真考慮電源管理的問題&#xff0c;電池供電的產品更應該注意低功耗的實現。 STM32電源介紹嵌入式開發直播課 - STM32 USART串口的應用 - 創客學院直播室?www.makeru.com.cn每一塊STM32芯片中都有一個電源控制器&#xff08;PWR&#xff0…

delphi 調用瀏覽器內核_HFL:基于混合模糊測試的Linux內核漏洞挖掘

RemarksConference: NDSS 2020Full Paper: HFL: Hybrid Fuzzing on the Linux KernelSummary針對的問題&#xff1a; Linux 操作系統內核安全漏洞的發現需要新技術。現有解決方案的不足&#xff1a;當前的模糊測試技術難以直接應用于內核安全漏洞發現。提出的創新方案概述&…

隔行變色java代碼_jquery入門—選擇器實現隔行變色實例代碼

1、JQuery選擇器繼承了CSS、path語音的部分語法&#xff0c;允許通過標簽名、屬性名、內容對DOM元素進行快速、準確的選擇。2、JQuery選擇器與JavaScript相比&#xff0c;具有代碼簡單、完善的檢測機制的優勢。3、使用JQuery選擇器實現隔行變色&#xff0c;示例代碼如下&#x…

python arduino c_從Python向Arduino LCD發送一個字符串

我想用python在arduinolcd16x2上顯示一個字符串&#xff0c;但是我遇到了串行通信的問題。在以下是Arduino中運行的代碼&#xff1a;Arduino代碼#include LiquidCrystal lcd(8, 9, 4, 5, 6, 7);String stringa;const unsigned long TimeOut 10; // timeout 10 msString string…

如何實現軟件的遠程更新_手機免root終于也能實現遠程控制了 這款國產軟件真是越來越好用...

說到遠程控制&#xff0c;大家或許可以說出好幾個應用軟件出來&#xff0c;比如Teamviewer、Anydesk、向日葵等等。其實&#xff0c;這些軟件我都用過&#xff0c;但Teamviewer現在對個人用戶經常宕機&#xff0c;Anydesk的功能又不夠豐富&#xff0c;只有一個向日葵遠程控制是…

角標越界 Java_【新人求助】利用占位符操作數據庫是總是提示數組角標越界是怎么回事 - Java論壇 - 51CTO技術論壇_中國領先的IT技術社區...

用占位符和數組來操作數據庫總是提示下角標越界&#xff0c;找了半天也沒弄明白哪里有問題&#xff0c;這個地方是跟著云課堂老師的講解做的&#xff0c;只不過操作的數據表不一樣&#xff0c;但是老師那個就沒問題&#xff0c;我就出了問題&#xff0c;如果有大神能幫忙看看&a…

簡述ospf的工作原理_現代數字存儲示波器的工作原理簡述

示波器是一種用途十分廣泛的電子測量儀器。俗話說&#xff0c;電是看不見摸不著的。但是示波器可以幫我們“看見”電信號&#xff0c;便于人們研究各種電現象的變化過程。所以示波器的核心功能&#xff0c;就和他的名字一樣&#xff0c;是顯示電信號波形的儀器&#xff0c;以供…

pyecharts 間距_高月雙色球20108期:紅球首尾間距參考29區段

雙色球第2020108期獎號為&#xff1a;03 09 11 24 25 28 16&#xff0c;紅球和值&#xff1a;100&#xff0c;重號2個&#xff1a;11 28&#xff0c;首尾間距&#xff1a;25。和值&#xff1a;上期和值為100&#xff0c;上升了22點&#xff0c;再次開出小和值&#xff0c;最近…

java類中聲明log對象_用于Android環境,java環境的log打印,可打印任何類型數據

LogXixi用于Android環境&#xff0c;java環境的log打印&#xff0c;可打印任何類型數據,根據android項目環境debug環境自動打開&#xff0c;release環境自動關閉android環境log打印&#xff0c;規范bean對象&#xff0c;json&#xff0c;xml對應log&#xff0c;crash捕捉&#…

xbox手柄接收器驅動_xbox手柄連接 win10電腦

xbox手柄 連接win10筆記本 分為三種連接方式&#xff1a;有線藍牙無線適配器首先說明一下連接方式的特點然后說明連接方式第一種&#xff1a;有線連接 手柄直接通過micro USB數據線和win10電腦連接。這一步最簡單&#xff0c;一般電腦會自動安裝驅動&#xff0c;連接之后可以使…

單片機復位后為什么要對sp重新賦值_51單片機系列之2點亮第一個led小燈

點亮led燈簡單的理解就是要求陽極高電平陰極低電平。接下來我們去看看單片機的原理圖&#xff0c;找到led 模塊。如圖可以看到led的陽極是連接的VCC(電源高電平)陰極連接的接口是單片機的I/O口P20到P27.要想led點亮只需控制單片機I/O口輸出低電平即可(單片機I/O口默認高電平)。…

db2與mysql編目_DB2編目、聯邦數據庫 - Goopand's OS Space - OSCHINA - 中文開源技術交流社區...

一、兩個數據庫在不同的服務器上[環境描述]10.0.0.10&#xff1a;庫名為 db_1010.0.0.17&#xff1a;庫名為 db_17[需求描述]在db_17庫中&#xff0c;跨庫查詢db_10庫的表[操作步驟]1)在10.0.0.17數據庫服務器&#xff0c;開啟聯邦支持db2 "update dbm cfg using federate…

關機時無人照管更新正在運行_無法抗拒的未來:無人叉車在內部物流中已成為現實...

自動化和半自動化的叉車不再是新奇的東西&#xff0c;在人力短缺的倉庫中取得了進展。他們最終會成為規范嗎?目前尚不知道全世界有多少輛無人駕駛叉車(也稱為自動叉車、機器人叉車或者AGV)售出。但是叉車生產商都顯示出&#xff0c;它在該領域的迅速增長。重要的是&#xff0c…