作者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