2017-04-05 65 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更具可读性和可维护性。他们为什么教你编写易于破解的代码?但无论如何,你实际提出的问题都得到了回答。也许你可以问一个新的,说明你正在使用的限制条件(但是你应该明确这些限制的来源是什么......现在听起来这是一个主题的工作 - 你应该这样明确地说如果你发布一个新的) –