2013-01-18 14 views
23

Właśnie zaczynam uczyć się R i mam problem, który pozostawia mnie dość zdezorientowany. Moim celem jest stworzenie pustego wektora i dołączenie do niego elementów. Wydaje się dość łatwe, ale rozwiązania, które widziałem na stackoverflow nie wydają się działać.Nie można utworzyć pustego wektora i dodać nowych elementów w R

Mianowicie,

>  a <- numeric() 
>  append(a,1) 
[1] 1 
>  a 
numeric(0) 

nie mogę zupełnie zrozumieć, co robię źle. Czy ktoś chce pomóc nowicjuszowi?

+0

Moglibyśmy również zrobić 'a <- append (a, 1)', ale 'c()' byłoby prawdopodobnie bardziej idiomatyczne. I dla początkujących powinienem również wspomnieć, że rosnące obiekty, takie jak te, są ok, gdy dopiero się uczysz i czujesz język, ale uważane są za złą praktykę (będzie bardzo, bardzo wolno), a ogólnie powinni go unikać. – joran

Odpowiedz

36

append robi coś, co jest nieco inne od tego, co myślisz. Zobacz ?append.

W szczególności zauważ, że append nie modyfikuje swojego argumentu. Zwraca wynik.

Chcesz funkcję c:

> a <- numeric() 
> a <- c(a, 1) 
> a 
[1] 1 
+1

@ user1935935 Uwaga: 'a <- c (a, 1)' przydziela wartość z powrotem do a. –

+3

@ user1935935 Pamiętaj, że R jest funkcjonalnym językiem programowania: funkcje nie mają (zwykle) żadnych skutków ubocznych. Jeśli chcesz zmodyfikować dowolny obiekt, zawsze musisz "złapać" wynik poprzez zadanie. – joran

5

Twój a wektor nie jest przekazywane przez referencję, więc gdy jest modyfikowany trzeba przechowywać go z powrotem do a. Nie można uzyskać dostępu do a i oczekiwać, że zostanie zaktualizowany.

Wystarczy przypisać wartość zwracaną do wektora, tak jak zrobił Matt:

> a <- numeric() 
> a <- append(a, 1) 
> a 
[1] 1 

Matt ma rację, że c() jest lepsze (mniej klawiszy i bardziej wszechstronny), choć korzystanie z append() jest w porządku.

Powiązane problemy