Użycie `…` (trzy kropki lub kropka-kropka) w funkcjach [duplikat]

84

Gdzie mogę znaleźć dokumentację dotyczącą użycia ...funkcji in? Przykłady byłyby przydatne.

Brandon Bertelsen
źródło
3
Dla użytkowników Pythona uczących się R, szybką odpowiedzią byłoby to, że ...jest to odpowiednik słowa kluczowego input ( def func(**kwargs)) w języku R
Anna

Odpowiedzi:

75

Słowo używane do opisu ...to „wielokropek”. Wiedza o tym powinna ułatwić wyszukiwanie informacji o konstrukcji. Na przykład pierwsze trafienie w Google to kolejne pytanie na tej stronie: Jak korzystać z funkcji wielokropka R podczas pisania własnej funkcji?

John Zwinck
źródło
3
Właściwie oficjalna nazwa w R to dots, np. Strona pomocy jest nazwana, ?dotsa „wielokropek” nie jest nawet wymieniony na tej stronie
MichaelChirico
Jeśli chodzi o pliki pomocy, ?dotsnie działa dla mnie, ale ?'...'działa.
coip
54

Mały przykład na początek.

f <- function(x, ...)
{
  dots <- list(...)                   #1
  if(length(dots) == 0) return(NULL) 
  cat("The arguments in ... are\n")
  print(dots)
  f(...)                              #2
}

f(1,2,3,"a", list("monkey"))

Funkcja f,, przechowuje wszystkie argumenty wejściowe oprócz pierwszego w zmiennej wielokropka. Aby uzyskać dostęp do jego zawartości, najłatwiej jest przekonwertować go na listę (1). Głównym zastosowaniem jest jednak przekazywanie argumentów do podfunkcji, co nie wymaga konwersji (2).

Richie Cotton
źródło
Dlaczego w # 2 ponownie wywołujesz tę samą funkcję f?
Jiapeng Zhang
1
@JiapengZhang To przykład funkcji rekurencyjnej. f()jest wywoływany wielokrotnie z różnymi argumentami za każdym razem. Uruchom kod i zobacz, czy rozumiesz, co się dzieje.
Richie Cotton,
2
Byłby to świetny przykład, aby wykazać ...length(), jak również
MichaelChirico
19

Powinieneś udać się do „R Language Definition”, sekcja 2.1.9 Kropka-kropka . Jest dostarczany w pakiecie z instalacją R. Uruchom help.start()sesję interaktywną, aby wyświetlić pomoc HTML, i kliknij łącze Definicja języka R. Możesz również użyć wersji PDF lub HTML z głównej strony.

W każdym razie ...służy do dopasowywania nieokreślonych argumentów formalnych funkcji.

args(sapply)                                                                                                               
function (X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)                                                                    
NULL   

sapply(mtcars, mean, trim = .5)                                                                                            
    mpg     cyl    disp      hp    drat      wt    qsec      vs      am    gear                                              
 19.200   6.000 196.300 123.000   3.695   3.325  17.710   0.000   0.000   4.000                                              
   carb                                                                                                                      
  2.000 

Jak widać, zdałem, trim = .5chociaż nie jest to określony jako formalny argument sapplyfunkcji.

(zwróć uwagę, że ten przykład jest trywialny, możesz go użyć, sapply(mtcars, median)aby osiągnąć ten sam wynik)

aL3xa
źródło
1
Jeśli nie jest określone, skąd wiesz, że jest legalne lub ważne?
Qed
1
@qed trimjest argumentem meanfunkcji. ...W sapplyto mechanizm trimzostać przekazane mean.
Richie Cotton