作者disney82231 (小刀會序曲)
看板R_Language
標題[問題] apply 取代for
時間Thu Mar 29 14:59:49 2018
[問題類型]:
程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
[軟體熟悉度]:
入門(寫過其他程式,只是對語法不熟悉)
[問題敘述]:
用for 寫了一個迴圈,想用apply寫出一樣的結果
另外想請問,在多數情況下,apply都能取代for嗎
[程式範例]:
for (i in 2:10){
x$v1[x[,i]==1] <- i }
}
若每列x的第i行=1時,x每列的第一行改成i
[關鍵字]:
apply for
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 120.126.194.162
※ 文章網址: https://webptt.com/m.aspx?n=bbs/R_Language/M.1522306793.A.5DA.html
1F:→ andrew43: 看起來就不像是apply。apply是逐列或逐行做同一個func 03/29 15:10
2F:→ andrew43: 你的註解和code似乎不是同義的。 03/29 15:17
3F:→ clansoda: Hi, I suggest you to watch this article #1QhBLjUr 03/29 15:26
4F:→ clansoda: I have explained when and why you should use apply 03/29 15:26
5F:→ clansoda: or for loop in a given scenario 03/29 15:26
6F:推 vfgce: 你有跑過你寫的東西嗎? 03/29 18:49
7F:→ vfgce: 你這樣是把第10行值為1的相對V1值設為10... 03/29 18:50
8F:推 vfgce: 對不起,看錯了... 03/29 18:53
9F:推 vfgce: 有不只一個i行=1時,第一行如何取? 03/29 19:04
我要回圈的行數,裡面只有0跟1而已,且同一列中2到10行只會有一個1~
※ 編輯: disney82231 (120.126.194.162), 03/29/2018 19:11:57
10F:推 vfgce: x1 = apply( x[,2:10],1, function(a) which(a==1)+1 ) 03/29 19:21
11F:→ vfgce: 再令x$v1=x1, 假設每列2-10行中都會也只有一個1, 03/29 19:22
12F:推 vfgce: 但問題再變過就不見得能用這種方法處理. 03/29 19:25
13F:推 vfgce: 一般若是涉及索引,用for 比較容易寫...apply不一定能寫. 03/29 19:34
14F:推 vfgce: 對了,一般在apply中不修改變數值,而是傳回值... 03/29 19:49
剛剛試了大大的CODE,這樣可以改,但原本第一行是1的話就會變成numeric(0)
不過還是謝謝你,所以我這種情況的話用for是最適合的嗎
※ 編輯: disney82231 (120.126.194.162), 03/29/2018 19:54:47
15F:推 vfgce: 有些東西想不出來怎麼用apply就只能用for.. 03/29 20:52
16F:→ vfgce: 但很多時候,是不夠了解 apply怎麼用... 03/29 20:53
17F:推 celestialgod: 這個用vectorize加速比較好,apply不適用 03/29 22:13
18F:推 celestialgod: 晚點傳code 03/29 22:14
19F:→ celestialgod: 測了一下... 其實迴圈改一改就好XDD 03/29 23:31
20F:→ obarisk: 這個問題用diag可以解 03/30 05:32