2013-01-18 2 views
23

Я только начинаю изучать R и у меня проблема, которая оставляет меня в замешательстве. Моя цель - создать пустой вектор и добавить к нему элементы. Кажется, достаточно просто, но решения, которые я видел в stackoverflow, похоже, не работают.Невозможно создать пустой вектор и добавить новые элементы в R

именно,

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

Я не могу вполне понять, что я делаю неправильно. Кто-нибудь хочет помочь новичкам?

+0

Возможно, вы могли бы сделать 'a <- append (a, 1)', но 'c()' было бы более идиоматичным. И для новичка я должен, вероятно, также упомянуть, что растущие объекты вроде этого в порядке, когда вы просто учитесь и получаете представление о языке, но считаете плохую практику (она будет очень и очень медленной), и в целом вы следует избегать этого. – joran

ответ

36

append делает что-то, что несколько отличается от того, что вы думаете. См. ?append.

В частности, обратите внимание, что append не изменяет свой аргумент. Он возвращает результат.

Вы хотите функцию c:

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

@ user1935935 Примечание: 'a <- c (a, 1)' присваивает значение обратно a. –

+3

@ user1935935 Помните, что R - язык функционального программирования: функции (обычно) не имеют побочных эффектов. Если вы хотите изменить любой объект, вам всегда нужно «поймать» результат посредством назначения. – joran

5

Ваш a вектор не передается по ссылке, поэтому, когда он модифицируется вы должны хранить его обратно в a. Вы не можете получить доступ к a и ожидать, что он будет обновлен.

Вам просто нужно присвоить возвращаемое значение вашего вектора, так же, как сделал Мэтт:

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

Matt является правильным, что c() предпочтительнее (меньше нажатий клавиш и более универсален), хотя использование вами append() прекрасно.

Смежные вопросы