[R-br] for e If

Éder Comunello comunello.eder em gmail.com
Sexta Abril 25 18:10:13 BRT 2014


Evelyn e demais colegas, boa tarde!

Acredito que basicamente faltou atribuir o índice (i) dos elementos a serem
usados em cada rodada ou verificação. Pode ser resolvido com uso de loops
ou não. No código abaixo tem três opções que testei.

### <code r>

Sit=c(3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)

d1=c(1.27,  5.80,  2.42,  3.11,  5.25,  4.74,  5.42,  5.14,  5.27,  5.61,
 6.09,  6.38,  6.34,  8.60, 7.36,  9.96, 10.86, 11.35,  8.94,  9.19,  8.66,
 8.98,  9.86,  9.94, 11.59, 15.61,
      6.28,  7.83,  7.94,  7.67,  8.62,  9.43,  9.00)

d2=c(9.12, 10.81, 10.21,  7.11,  7.23,  7.62,  7.69,  7.59,  5.73,
      5.39,  5.35,  5.42,  5.32,  3.84,  2.89,  0.70,  1.65,  2.32,  4.01,
      4.16,  4.32,  4.74,  5.12,  3.01,  1.91,  7.33,
      3.81,  2.27,  2.22,  4.44,  4.76,  7.35,  7.35)

#############
### Solução 1
#############

for(i in seq_along(Sit)){
          if (i==1) k1 <- as.vector(NULL)
          if(Sit[i]==1)      {ktmp <- (100 + d1[i]^2 - d2[i]^2) / 20}
          else if(Sit[i]==2) {ktmp <- (10 + (100 + d1[i]^2 - d2[i]^2) / 20)}
          else               {ktmp <- (400 + d1[i]^2 - d2[i]^2) / 40}
          k1 <- c(k1,ktmp)
}

#############
### Solução 2
#############

for(i in seq_along(Sit))  {
          if (i==1) k2 <- as.vector(NULL)
          ktmp <- (switch(Sit[i], (100 + d1[i]^2 - d2[i]^2) / 20,
                                  (10  + (100    + d1[i]^2 - d2[i]^2) / 20),
                                  (400 + d1[i]^2 - d2[i]^2) / 40))
          k2 <- c(k2,ktmp)
}

#############
### Solução 3
#############

{
          df <- data.frame(Sit, d1, d2)
          df$k3 <- NA; df
          i <- which(Sit==1); df$k3[i] <- (100 + d1[i]^2 - d2[i]^2) / 20
          i <- which(Sit==2); df$k3[i] <- (10  + (100    + d1[i]^2 -
d2[i]^2) / 20)
          i <- which(Sit==3); df$k3[i] <- (400 + d1[i]^2 - d2[i]^2) / 40
          df
          k3 <- df$k3
}

all.equal(k1, k2, k3)
# [1] TRUE

### </code>

Éder Comunello <c <comunello.eder em gmail.com>omunello.eder em gmail.com>
Dourados, MS - [22 16.5'S, 54 49'W]
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20140425/2b1d6545/attachment.html>


Mais detalhes sobre a lista de discussão R-br