[問題] apply 取代for

看板R_Language作者 (小刀會序曲)時間6年前 (2018/03/29 14:59), 6年前編輯推噓10(10010)
留言20則, 5人參與, 6年前最新討論串1/2 (看更多)
[問題類型]: 程式諮詢(我想用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://www.ptt.cc/bbs/R_Language/M.1522306793.A.5DA.html

03/29 15:10, 6年前 , 1F
看起來就不像是apply。apply是逐列或逐行做同一個func
03/29 15:10, 1F

03/29 15:17, 6年前 , 2F
你的註解和code似乎不是同義的。
03/29 15:17, 2F

03/29 15:26, 6年前 , 3F
Hi, I suggest you to watch this article #1QhBLjUr
03/29 15:26, 3F

03/29 15:26, 6年前 , 4F
I have explained when and why you should use apply
03/29 15:26, 4F

03/29 15:26, 6年前 , 5F
or for loop in a given scenario
03/29 15:26, 5F

03/29 18:49, 6年前 , 6F
你有跑過你寫的東西嗎?
03/29 18:49, 6F

03/29 18:50, 6年前 , 7F
你這樣是把第10行值為1的相對V1值設為10...
03/29 18:50, 7F

03/29 18:53, 6年前 , 8F
對不起,看錯了...
03/29 18:53, 8F

03/29 19:04, 6年前 , 9F
有不只一個i行=1時,第一行如何取?
03/29 19:04, 9F
我要回圈的行數,裡面只有0跟1而已,且同一列中2到10行只會有一個1~ ※ 編輯: disney82231 (120.126.194.162), 03/29/2018 19:11:57

03/29 19:21, 6年前 , 10F
x1 = apply( x[,2:10],1, function(a) which(a==1)+1 )
03/29 19:21, 10F

03/29 19:22, 6年前 , 11F
再令x$v1=x1, 假設每列2-10行中都會也只有一個1,
03/29 19:22, 11F

03/29 19:25, 6年前 , 12F
但問題再變過就不見得能用這種方法處理.
03/29 19:25, 12F

03/29 19:34, 6年前 , 13F
一般若是涉及索引,用for 比較容易寫...apply不一定能寫.
03/29 19:34, 13F

03/29 19:49, 6年前 , 14F
對了,一般在apply中不修改變數值,而是傳回值...
03/29 19:49, 14F
剛剛試了大大的CODE,這樣可以改,但原本第一行是1的話就會變成numeric(0) 不過還是謝謝你,所以我這種情況的話用for是最適合的嗎 ※ 編輯: disney82231 (120.126.194.162), 03/29/2018 19:54:47

03/29 20:52, 6年前 , 15F
有些東西想不出來怎麼用apply就只能用for..
03/29 20:52, 15F

03/29 20:53, 6年前 , 16F
但很多時候,是不夠了解 apply怎麼用...
03/29 20:53, 16F

03/29 22:13, 6年前 , 17F
這個用vectorize加速比較好,apply不適用
03/29 22:13, 17F

03/29 22:14, 6年前 , 18F
晚點傳code
03/29 22:14, 18F

03/29 23:31, 6年前 , 19F
測了一下... 其實迴圈改一改就好XDD
03/29 23:31, 19F

03/30 05:32, 6年前 , 20F
這個問題用diag可以解
03/30 05:32, 20F
文章代碼(AID): #1Ql8xfNQ (R_Language)
文章代碼(AID): #1Ql8xfNQ (R_Language)