Jak naprawić w r: wymiana ma zerową długość


Błąd, który możesz napotkać w R to:

 Error in x[1] = x[0]: replacement has length zero

Ten błąd występuje, gdy próbujesz zastąpić wartość w wektorze inną wartością, która „ma zerową długość”, co oznacza, że nie istnieje.

W tym samouczku dokładnie wyjaśniono, jak naprawić ten błąd.

Jak odtworzyć błąd

Załóżmy, że tworzymy następujący wektor z 10 wartościami w R:

 data = c(1, 4, 5, 5, 7, 9, 12, 14, 15, 17)

Załóżmy teraz, że spróbujemy użyć poniższej pętli for() do pomnożenia każdej wartości w wektorze przez wartość przed nią:

 for (i in 1: length (data)) {
  data[i] = data[i] * data[i-1]
}

Error in data[i] <- data[i] * data[i - 1]: replacement has length zero

Otrzymujemy błąd „ zastąpienie ma długość zerową ”, ponieważ w pierwszej pętli próbujemy wykonać następujące mnożenie:

  • dane[1] * dane[0]

Ponieważ indeksy R zaczynają się od 1, wartość data[0] po prostu nie istnieje.

Możemy to sprawdzić próbując wydrukować wartość znajdującą się na pozycji 0 wektora:

 print (data[0])

numeric(0)

Rezultatem jest wektor cyfrowy o długości 0 – innymi słowy, nie istnieje.

Jak naprawić błąd

Sposobem naprawienia tego błędu jest po prostu użycie pętli for() , która nie próbuje uzyskać dostępu do wartości wektora, który nie istnieje.

W naszym przykładzie moglibyśmy naprawić ten błąd, uruchamiając pętlę for na pozycji indeksu 2, a nie na pozycji 1:

 for (i in 2: length (data)) {
  data[i] = data[i] * data[i-1]
}

#view updated vector
data

 [1] 1 4 20 100 700 6300 75600
 [8] 1058400 15876000 269892000

Zauważ, że nie otrzymujemy błędu, ponieważ nigdy nie próbowaliśmy uzyskać dostępu do pozycji indeksu w wektorze, który nie istnieje.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w R:

Jak naprawić: warunek ma długość > 1 i zostanie użyty tylko pierwszy element
Jak naprawić: Zamień ma X linii, dane mają Y
Jak naprawić: nienumeryczny argument operatora binarnego
Jak naprawić: dim(X) musi mieć dodatnią długość
Jak naprawić: błąd podczas wybierania nieużywanych argumentów

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *