2013-01-11 13 views
7

Say tek sayı endeks bul: Ben tüm tek elemanların someVector yerleri olan bir vektör almak istiyorumbazı vektör var bir tamsayı vektörü

someVector = c(1, 3, 4, 6, 3, 9, 2, -5, -2) 

yüzden de

o şekilde görünecektir bu durumda ...

resultVector = c(1, 2, 5, 6, 8) 
+0

'' Hangi ' –

cevap

11
> which(someVector %% 2 == 1) 
[1] 1 2 5 6 8 
6
library(schoolmath) 
which(is.odd(someVector)) 
[1] 1 2 5 6 8 

sadece burada eğlence is.odd fonksiyonun kodu için:

Kesinlikle
function (x) 
{ 
    start <- 1 
    end <- length(x) + 1 
    while (start < end) { 
    y <- x[start] 
    if (y == 0) { 
     cat("Please enter a number > 0") 
     end 
    } 
    test1 <- y/2 
    test2 <- floor(test1) 
    if (test1 != test2) { 
     if (start == 1) { 
     result = TRUE 
     } 
     else { 
     result <- c(result, TRUE) 
     } 
    } 
    else { 
     if (start == 1) { 
     result = FALSE 
     } 
     else { 
     result <- c(result, FALSE) 
     } 
    } 
    start <- start + 1 
    } 
    return(result) 
} 

, bu işlevi kullanmayın!

+2

Wow! 'Is.odd' işlevinde çok fazla kod var. Neden bu 'is.odd <- function (x) x %% 2 == 1'' den daha iyidir? ... Ayrıca, bir süre döngü içinde bir vektör büyüyen beri daha yavaş olacak gibi görünüyor (fonksiyon zaten çıkış uzunluğunu bilir olsa bile) – GSee

+0

@GSee haklısın, ben de bu mee gördüm ben umarım Bu aptalca işlev için dwonvoted değil :) – agstudy

+1

Bunun ne kadar çirkin olduğuna bakın: 'suppressMessages (is.odd (c (0, 2, 0, 1, 0))). Yazarın neden 0 olduğunu kabul etmediğini merak et. http://en.wikipedia.org/wiki/Parity_of_zero – GSee

İlgili konular