2017-02-07 4 views
4

J'essaie de réduire la liste des noms de gènes qui m'ont été donnés. Je suis en train d'éliminer les noms répétitifs qui peuvent être présents, mais je continue à obtenir une erreur lors de l'exécution de mon code:Plusieurs conditions dans les déclarations if dans R

counter=0 
i=0 
j=0 
geneNamesRevised=array(dim=length(geneNames)) 
for (i in 0:length(geneNamesRevised)) 
    geneNamesRevised[i]="" 
geneNamesRevised 
for (i in 1:length(geneNames)) 
    for (j in 1:length(geneNamesRevised)) 
    if (geneNames[i]==geneNamesRevised[j]) 
    { 
     break 
    } 
    else if ((j==length(geneNamesRevised)-1) && 
      (geneNames[i]!=geneNamesRevised[j])) 
    { 
     geneNamesRevised[counter]=geneNames[i] 
     counter++ 
    } 

Le message d'erreur est une chaîne répétitive de:

la condition a une longueur> 1 et seulement le premier élément sera utilisé la condition a la longueur> 1 et seulement le premier élément sera utilisé la condition a la longueur> 1 et seulement le premier élément sera utilisé

et ce message d'erreur est pour la dernière "else if" déclaration qui a le '& &'.

Merci!

+0

juste essayer un seul '&'. est-ce que ça marche? –

Répondre

0

utilisation & au lieu de &&,

else if ((j==length(geneNamesRevised)-1) & (geneNames[i]!=geneNamesRevised[j])) 
1

Il y a quelques problèmes dans votre code.

1) Le else est incorrectement spécifié - ou non :) merci @Mohsen_Fatemi

2) & est généralement ce dont vous avez besoin plutôt que & &

3) contre ++ n'est pas R

Recopiez le code ci-dessous et voyez s'il fonctionne

for (i in 1:length(geneNames)){ 
    for (j in 1:length(geneNamesRevised)){ 
     if (geneNames[i]==geneNamesRevised[j]) 
     { 
      break 
     } else { 

      if ((j==length(geneNamesRevised)-1) & (geneNames[i]!=geneNamesRevised[j])) 
      { 
       geneNamesRevised[counter]=geneNames[i] 
       counter <- counter + 1 
      } 
     } 
    } 
} 

Modifier

4) également vous accolades manquantes pour votre for s

+0

vous avez tort sur 'else if', regardez [ici] (https://www.tutorialspoint.com/r/r_if_else_statement.htm) –

2

Pourquoi ne pas simplement

geneNamesRevised <- unique(geneNames) 

... qui retourne une liste raccourcie. Il existe également une fonction duplicated qui peut être utilisée pour supprimer les doublons lorsqu'ils sont annulés.