Hoe op te lossen in r: de voorwaarde heeft een lengte > 1 en alleen het eerste element wordt gebruikt


Een fout die je tegen kunt komen in R is:

 Warning message:
In if (x > 1) {:
  the condition has length > 1 and only the first element will be used 

Deze fout treedt op wanneer u probeert een if()- functie te gebruiken om een voorwaarde te controleren, maar u een vector doorgeeft aan de if()- functie in plaats van individuele elementen.

In deze tutorial wordt precies uitgelegd hoe u deze fout kunt oplossen.

Hoe de fout te reproduceren

Stel dat we de volgende vector in R hebben:

 #define data
x <- c(2, 3, 1, 1, 5, 7)

Stel nu dat we een if() -functie proberen te gebruiken om te controleren of elke waarde van vector x groter is dan 1, en die waarden vervolgens met 2 vermenigvuldigen:

 #if value in vector x is greater than 1, multiply it by 2
if (x>1) {
  x*2
}

Warning message:
In if (x > 1) {:
  the condition has length > 1 and only the first element will be used

We ontvangen een waarschuwingsbericht omdat we een vector hebben doorgegeven aan de if() -instructie.

Een if() -instructie kan slechts één element van een vector tegelijk controleren, maar met behulp van deze code hebben we geprobeerd elk element van de vector tegelijk te controleren.

Hoe u de fout kunt oplossen

De eenvoudigste manier om deze fout op te lossen is door in plaats daarvan een ifelse() -functie te gebruiken:

 #if value in vector x is greater than 1, multiply it by 2
ifelse(x>1, x*2, x)

[1] 4 6 1 1 10 14

Standaard controleert een ifelse() -functie elk element van een vector één voor één. Hierdoor kunnen we de fout vermijden die we eerder tegenkwamen.

Hier ziet u hoe de functie ifelse() de uitvoerwaarden produceert die deze produceerde:

  • Het eerste element (2) was groter dan 1, dus we vermenigvuldigden het met 2 om 2*2 = 4 te krijgen
  • Het tweede element (3) was groter dan 1, dus we vermenigvuldigden het met 2 om 3*2 = 6 te krijgen
  • Het derde element (1) was niet groter dan 1, dus lieten we het zoals het is: 1
  • Het vierde element (1) was niet groter dan 1, dus lieten we het zoals het is: 1

Enzovoort.

Gerelateerd: Hoe schrijf je een geneste For-lus in R

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in R kunt oplossen:

Hoe op te lossen in R: NA’s geïntroduceerd door dwang
Hoe op te lossen in R: dim(X) moet een positieve lengte hebben
Oplossing in R: namen komen niet overeen met eerdere namen
Hoe op te lossen in R: de lengte van een langer object is geen veelvoud van de lengte van een korter object
Hoe op te lossen in R: contrasten kunnen alleen worden toegepast op factoren met 2 of meer niveaus

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert