2015-09-06 33 views
9

Dlaczego następujące czynności nie działają?Dlaczego nie możemy wykonać pętli `...?

f = function(...) for (i in ...) print(i) 
f(1:3) 
# Error in f(1:3) : '...' used in an incorrect context 

podczas tej pracy dobrze

f = function(...) for (i in 1:length(...)) print(...[i]) 
f(1:3) 
# [1] 1 
# [1] 2 
# [1] 3 

Odpowiedz

8

To nie działa, ponieważ ... typ obiektu nie jest dostępny w kodzie interpretowane. Trzeba uchwycić obiekt jako lista jako nongkrong pokazał:

for(i in list(...)) 

Spójrz instrukcji R here

+4

Można też owinąć go w 'C' takich jak' c (...) ' –

+1

@ Remi.b Jako sidenote, możesz faktycznie uzyskać dostęp do określonych elementów '...' jako '..1',' ..2' itp. Nie jest to zbyt użyteczne dla zapętlenia, ale zobaczysz, że używane od czasu do czasu jako skrót do uzyskania określonego elementu. – joran

+0

@joran - sprytnie, a to jest udokumentowane w '? Zastrzeżone' dla tych, którzy się zastanawiają. – thelatemail