Как заполнить матрицу с al oop в R? - PullRequest
0 голосов
/ 29 апреля 2020
a <- function(b,c,d,e,f){ 
if(f == 1){
  Value1 <- b * c * d * e
  return(Value1)
}else if(f == 2){
  Value2 <- b * c * d
  return(Value2) 
}else{
  Value3 <- 0 
}
}

Предположим, что я хотел бы проанализировать отношения между Value2 и d для d =seq(1,1.2,0.01) с c = seq(1,2,0.2), а b, e, f зафиксированы.

Я пробовал это:

ValueChange <- matrix(,6,21) 

for(i in seq(1,1.2,0.01)){
  for(j in seq(1,2,0.2)){
    for(n in 1:6){

      ValueChange[n,] <- c(ValueChange, a(10,j,i,5,2))

    }
}
}
ValueChange

Должно быть так:

ValueChange[1,1] <- a(10,1,1,5,2)
ValueChange[1,2] <- a(10,1,1.01,5,2)
... 
ValueChange[2,1] <- a(10,1.2,1,5,2)
...

Сообщение об ошибке: количество заменяемых элементов не кратно длине замены. Тем не менее, я понятия не имею, как это исправить. Спасибо за вашу помощь!

1 Ответ

2 голосов
/ 29 апреля 2020

Для вашего вложенного for l oop это может быть что-то вроде

p <- seq(1,1.2,0.01)
q <- seq(1,2,0.2)
for(i in seq_along(p)){
  for(j in seq_along(q)){
      ValueChange[j,i] <- a(10,q[j],p[i],5,2)
  }
}

Может быть, вы можете попробовать вложенный sapply

ValueChange <- sapply(seq(1,1.2,0.01), function(i) sapply(seq(1,2,0.2), function(j) a(10,j,i,5,2)))

, который дает тот же результат, что и вложенный for l oop

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