если еще цикл не работает - PullRequest
0 голосов
/ 09 июня 2018

Я новичок в R studio, так что, надеюсь, кто-нибудь поможет мне с этой проблемой. Дело: Я хочу сделать цикл if else.Я сделал следующий код для матрицы l times m:

for (i in 1:l){
  for (j in 1:m){ 
    if (is.na(quantilereturns[i,j]) < quantile(quantilereturns[,j], c(.1), na.rm=TRUE)) { 
      quantilereturns[i,j]    
    } else { (0) }
  }
}

Резюме: Я хочу создать матрицу со значениями, которые меньше, чем квантиль определенноговектор в матрице quantilereturns.Поэтому, когда они меньше 10% квантиля, они получают свое первоначальное значение, иначе это будет ноль.Код не дает никаких ошибок, но он также не меняет значения в матрице.Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 09 июня 2018

Вам необходимо присвоить результат ячейке матрицы.Я возьму в качестве примера матрицу недавней другой нити:

a <- c(4, -9, 2)
b <- c(-1, 3, -8)
c <- c(5, 2, 6)
d <- c(7, 9, -2)
matrix <- cbind(a,b,c,d)

d <- dim(matrix)
rows <- d[1]
columns <- d[2]

print("Before")
print(matrix)

for (i in 1:rows) {
  for (j in 1:columns) {
    if (is.na(matrix[i,j]) >= quantile(matrix[,j], c(.1), na.rm=TRUE)) {
      matrix[i,j] <- 0
    }
  }
}

print("After")
print(matrix)

это дает

[1] "Before"
      a  b c  d
[1,]  4 -1 5  7
[2,] -9  3 2  9
[3,]  2 -8 6 -2
[1] "After"
     a b c d
[1,] 0 0 5 0
[2,] 0 0 2 0
[3,] 0 0 6 0

Итак, основная строка, которую вы ищете, это matrix[i,j] <- 0

...