Необходимость существования объекта с именем Out
до ввода for
-l oop зависит от того, как спроектированы функции c
и [<-
. Им нужны имена, чтобы существовать в таблице объектов, которую поддерживает интерпретатор R. Вы использовали «=», но в этом контексте на самом деле используется функция <-
, оператор присваивания. Код в вопросе, по-видимому, не использует этот оператор, но на самом деле он вызывается, когда используется знак "=" в Out=c(Out,o)
. Вы не можете присвоить значение для Out
в LHS назначения, добавив его, потому что Out
в RHS уже не имеет значения (даже значения длины 0) в списке объектов данных R когда c
-функция пытается получить доступ к своему значению.
Оператор <-
на самом деле является функцией, замаскированной под оператор инфикса. Вы можете продемонстрировать это с помощью:
`<-`(my.out , 4)
> my.out
[1] 4
Он также имеет индексированную версию присвоения [<-
, которая требует, чтобы указанный объект на LHS существовал. Это еще один источник ошибок для пользователей -l oop. Если указанный объект LHS, присвоенный [<-
, не существует во время запуска l oop, то в первый раз через l oop вы получите ошибку:
rm(my.out2) #make sure it doesn't exist
for (i in 1:10) { my.out2[i] <- 4 } # LHS doesn't exist, but RHS value exists
#Error: object 'my.out2' not found