Еще один вложенный цикл в R - PullRequest
1 голос
/ 29 марта 2012

У меня есть следующие данные, вложенные в цикл:

x <- c(12, 27, 21, 16, 12, 21, 18, 16, 20, 23, 21, 10, 15, 26, 21, 22, 22, 19, 26, 26)
y <- c(8, 10,  7,  7,  9,  5,  7,  7, 10,  4, 10,  3,  9,  6,  4,  2,  4,  2,  3,  6)

a <- c(20,25) 
a.sub <- c()
df <- c()
for(j in 1:length(a)){
    a.sub <- which(x >= a[j])   
    for(i in 1:length(a.sub)){
        df[i] <- y[a.sub[i]]    
    }
    print(df)
}

Я бы хотел, чтобы цикл возвращал значения для df следующим образом:

[1] 10  6  3  6  4 10  6  4  2  4  3  6
[1] 10  6  3  6

Однако, если он у меня естьцикл возвращает дважды одинаковые значения df для <- 20, но не для <- 25: </p>

[1] 10  7  5 10  4 10  6  4  2  4  3  6
[1] 10  6  3  6  4 10  6  4  2  4  3  6

Ответы [ 2 ]

1 голос
/ 29 марта 2012
for(i in 1:length(a.sub)){
    df[i] <- y[a.sub[i]]    
}

может стать

df <- y[a.sub]    

, ни a.sub, ни df не должны быть предварительно определены и, следовательно, ...

x <- c(12, 27, 21, 16, 12, 21, 18, 16, 20, 23, 21, 10, 15, 26, 21, 22, 22, 19, 26, 26)
y <- c(8, 10,  7,  7,  9,  5,  7,  7, 10,  4, 10,  3,  9,  6,  4,  2,  4,  2,  3,  6)

a <- c(20,25) 
for(j in 1:length(a)){
    a.sub <- which(x >= a[j])   
    df <- y[a.sub]    
    print(df)
}

Это может быть сокращеноdf не нужен, если вы все равно печатаете подмножество y.Просто распечатайте это напрямую.А селектор настолько короткий, что ни одной строки не запутает.Кроме того, зачем использовать длину а и индекс .. цикл через напрямую.Так что это может быть ...

a <- c(20,25) 
for(ax in a){
    print( y[ which(x >= ax) ] )
}
0 голосов
/ 29 марта 2012

Не уверен, является ли это упрощенной версией более сложной проблемы, но я, вероятно, решил бы ее, используя некоторую прямую индексацию и функцию применения. Примерно так:

z <- cbind(x,y)
sapply(c(20,25), function(x) z[z[, 1] >= x, 2])
[[1]]
 [1] 10  7  5 10  4 10  6  4  2  4  3  6

[[2]]
[1] 10  6  3  6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...