作者piq (享)
看板Statistics
標題Re: [程式] R中的if條件
時間Wed Mar 20 21:18:54 2013
感謝大家的建議
其實一開始最簡單的方法是用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)
1F:推 JKY:把a設定成相同長度的向量即可 03/20 21:33
2F:→ ching0629:描述的還是不夠詳盡,最好給你這個V矩陣的前10列 03/20 23:06
3F:→ ching0629:我認為版友們幾乎給了所有可以用的寫法,但是還滿足不了 03/20 23:06
4F:→ ching0629:你的需求,恐怕是你想問的問題跟版友們感覺得不同 03/20 23:07
5F:推 diplazium:試試: result <- vector(length=length(v[,1])) 03/20 23:08
6F:→ diplazium:result[which(v[,1]==a)] <- v[which(v[,1]==a),1]-a 03/20 23:08
7F:→ ching0629:a最好也想像一個數字帶一下,讓大家了解"輸入"及"輸出" 03/20 23:08
8F:→ diplazium:result[which(v[,1]!=a)] <- 12-a+v[which(v[,1]!=a),1] 03/20 23:08
9F:→ diplazium:我試了一下這樣的vectorization 應該行得通 03/20 23:15
10F:推 Wush978:如果你的if之後的運算很簡單的話(不超過兩三行) 03/21 00:21
11F:→ Wush978:可以用Rcpp+inline用for迴圈做,效能可以好很多 03/21 00:22
12F:→ Wush978:我直接回文給個範例好了 03/21 00:22