2017-04-05 98 views
1

在代碼R:矢量滿足在r中的項目的條件要素的

for (i in 1:10) { 
    if (!i %% 2){ 
    next 
    } 
    print(i) 
} 

我有作爲輸出

[1] 1 
[1] 3 
[1] 5 
[1] 7 
[1] 9 

但我需要滿足該條件,即(i's的矢量1,3,5,7,9)。 如何獲得矢量(事先不知道矢量維度「長度」)?

以上是我的問題的一個例子:

x=c(0.1,0.4,0.5) 
    y=c(0.2,0.3,0.6,0.7) 

cont1=0 
    for(i in 1:(length(x)+1)){ 

    for(j in 1:(length(y)+1)){ 

     if(round((abs((j-1)-(i-1)*(length(y)/length(x)))),3) < round(max.v.d,3)) { 
     cont1=cont1+1 
     print(paste(i-1,j-1)) 
      } 

    } 
    } 

輸出

[1] "0 0" 
[1] "0 1" 
[1] "1 1" 
[1] "1 2" 
[1] "2 2" 
[1] "2 3" 
[1] "3 3" 
[1] "3 4" 

但是,我需要與這些元素的矩陣。

回答

3

在許多方面。這裏有一個:

i <- 1:10 
i[as.logical(i%%2)] 

一種替代方案:

i[(i%%2)==1] 

對誰恨型人一個版本的第一個:

i=1:10 
i[!!(i%%2)] 

如果你需要做這樣的通常你應該寫一個函數,像這樣:

odd <- function(x) x%%2 != 0 

even <- function(x) x%%2 == 0 

......或兩者兼而有之。然後,你可以做的東西一樣

i[odd(i)] 
[1] 1 3 5 7 9 
+0

我一般的問題是: 內爲() – albert

+0

真奇怪如何才能在一個if(滿足條件「要素」);如果你需要向量中的元素,R提供了一種避免必須像這樣收集它們的方法。如果您使用矢量化工具,R更具可讀性和可維護性。他們爲什麼教你編寫易於破解的代碼?但無論如何,你實際提出的問題都得到了回答。也許你可以問一個新的,說明你正在使用的限制條件(但是你應該明確這些限制的來源是什麼......現在聽起來這是一個主題的工作 - 你應該這樣明確地說如果你發佈一個新的) –