Re: [問題] 關於sweep function
舉個例子
X = replicate(3, 1:5)
# [,1] [,2] [,3]
# [1,] 1 1 1
# [2,] 2 2 2
# [3,] 3 3 3
# [4,] 4 4 4
# [5,] 5 5 5
# 先看最簡單的例子,每一列乘上1:3
sweep(X, 2, 1:3, '*')
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 2 4 6
# [3,] 3 6 9
# [4,] 4 8 12
# [5,] 5 10 15
# 每一行乘上1:5
sweep(X, 1, 1:5, '*')
# [,1] [,2] [,3]
# [1,] 1 1 1
# [2,] 4 4 4
# [3,] 9 9 9
# [4,] 16 16 16
# [5,] 25 25 25
所以第一個input是一個矩陣
第二個input是控制你要做行運算還是做列運算
行運算是1,列運算是2 這裡跟apply的方向不同,要注意
第三個就根據第二個輸入對應長度的向量
像是第二個是1,第三個的向量長度就要跟
第一個input的每一行的長度相同(也就是跟列數相同)
第四個input是有兩個input的function
你如果用'+', '-', '*', '/'都是 a+b, a-b, a*b, a/b等等
你也可以自己輸入自己的函數,例如:
sweep(X, 1, 1:5, function(a,b) a^2+a+b)
# [,1] [,2] [,3]
# [1,] 3 3 3
# [2,] 8 8 8
# [3,] 15 15 15
# [4,] 24 24 24
# [5,] 35 35 35
拿第一個例子來做解析
其實他就是在做這種事情:
sweep(X, 2, 1:3, '*') == '*'(X, t(replicate(nrow(X), 1:3)) )
# [,1] [,2] [,3]
# [1,] TRUE TRUE TRUE
# [2,] TRUE TRUE TRUE
# [3,] TRUE TRUE TRUE
# [4,] TRUE TRUE TRUE
# [5,] TRUE TRUE TRUE
其中的元素長這樣:
t(replicate(nrow(X), 1:3))
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 1 2 3
# [3,] 1 2 3
# [4,] 1 2 3
# [5,] 1 2 3
只是sweep比replicate這個方法有效率
※ 引述《buzz20374 ()》之銘言:
: 問題: 當你想要問問題時,請使用這個類別
: [問題類型]:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
: [軟體熟悉度]:
: 新手(沒寫過程式,R 是我的第一次)
: [問題敘述]:
: 在看 The R book 的 sweep function
: 最後面的例子我看不太懂
: sweep(matdata,1,1:10,function(a,b) b)
: sweep(matdata,2,1:4,function(a,b) b)
: http://i.imgur.com/d4brvD9.png

: function(a,b) b 代表甚麼意思呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.205.27.107
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1441876016.A.0CA.html
※ 編輯: celestialgod (123.205.27.107), 09/10/2015 17:10:37
※ 編輯: celestialgod (123.205.27.107), 09/10/2015 17:17:32
推
09/10 17:33, , 1F
09/10 17:33, 1F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章