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.


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?


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).


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)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.