Re: [程式] R中的if條件

看板Statistics作者 (享)時間12年前 (2013/03/20 21:18), 編輯推噓3(309)
留言12則, 4人參與, 最新討論串2/5 (看更多)
感謝大家的建議 其實一開始最簡單的方法是用for 但是因為真實在跑分析時 v[,1]的長度大約是17萬6000個 也就是說v是一個176000x20up的矩陣 如果這時候用for(i 1:length(v[,1]))是可以跑... 但是會跑非常久~我並不想要這樣 而A,B兩運算是要把v[,1]重新編程一個號碼 只是規則不同 有想過用ifelse但似乎是失敗了 ifelse(v[,1]==a,A,B) 分析上 A運算是:v[i,1]-a B運算是:12-a+v[i,1] 所以我當初是寫成: ifelse(v[,1]==a,v[i,1]-a,12-a+v[i,1]) 但是不能跑.. 莫非是ifelse裡面不能用邏輯算式? 還有是recodes指令... 我的R只接跟我說沒有這個指令 囧 所以我在想是否還有其他的方法~"~ : [軟體程式類別]: : R : [程式問題]: : if條件問題 : [軟體熟悉度]: : 低(1~3個月) : [問題敘述]: : v是一個矩陣 : a是一個我們任意給的數(已知) : 今天我希望v中的某行(假設第一行) 中的各元素做是否等於a的判斷運算 : 我希望能在不用for下 完成我想要的運算 : 但是一直想不出 : [程式範例]: : 以下為大略範例 : >test<-function(v,a){ : +if(v[,1]==a){執行A運算} : +else{執行B運算}} : Warning message: : In if (a == v[, 1]) { : : 條件的長度 > 1,因此只能用其第一元素 : === : 想請問高手能有辦法步用for的狀況下 : 比對v[,1]中的元素是否等於a做邏輯運算嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.241.25.242 ※ 編輯: piq 來自: 111.241.25.242 (03/20 21:24) ※ 編輯: piq 來自: 111.241.25.242 (03/20 21:26)

03/20 21:33, , 1F
把a設定成相同長度的向量即可
03/20 21:33, 1F

03/20 23:06, , 2F
描述的還是不夠詳盡,最好給你這個V矩陣的前10列
03/20 23:06, 2F

03/20 23:06, , 3F
我認為版友們幾乎給了所有可以用的寫法,但是還滿足不了
03/20 23:06, 3F

03/20 23:07, , 4F
你的需求,恐怕是你想問的問題跟版友們感覺得不同
03/20 23:07, 4F

03/20 23:08, , 5F
試試: result <- vector(length=length(v[,1]))
03/20 23:08, 5F

03/20 23:08, , 6F
result[which(v[,1]==a)] <- v[which(v[,1]==a),1]-a
03/20 23:08, 6F

03/20 23:08, , 7F
a最好也想像一個數字帶一下,讓大家了解"輸入"及"輸出"
03/20 23:08, 7F

03/20 23:08, , 8F
result[which(v[,1]!=a)] <- 12-a+v[which(v[,1]!=a),1]
03/20 23:08, 8F

03/20 23:15, , 9F
我試了一下這樣的vectorization 應該行得通
03/20 23:15, 9F

03/21 00:21, , 10F
如果你的if之後的運算很簡單的話(不超過兩三行)
03/21 00:21, 10F

03/21 00:22, , 11F
可以用Rcpp+inline用for迴圈做,效能可以好很多
03/21 00:22, 11F

03/21 00:22, , 12F
我直接回文給個範例好了
03/21 00:22, 12F
文章代碼(AID): #1HIRT1lh (Statistics)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 2 之 5 篇):
文章代碼(AID): #1HIRT1lh (Statistics)