함수에서`…`(3 점 또는 점 점점) 사용 [중복]


84

...함수 사용에 대한 문서는 어디에서 찾을 수 있습니까 ? 예가 유용 할 것입니다.


3
R을 배우는 파이썬 사용자의 경우, 빠른 대답은 ...파이썬의 키워드 입력 ( def func(**kwargs)) 과 동일한 R입니다
Anna

답변:


75

설명하는 데 사용되는 단어 ...는 "줄임표"입니다. 이를 알면 구성에 대한 정보를 더 쉽게 검색 할 수 있습니다. 예를 들어 Google의 첫 번째 히트는이 사이트의 또 다른 질문입니다. 자신의 함수를 작성할 때 R의 줄임표 기능을 사용하는 방법은 무엇입니까?


3
실제로 R의 공식 명칭이되어 dots, 예를 들어, 도움말 페이지의 이름은 ?dots및 "줄임표는"심지어 페이지에 언급되지 않은
MichaelChirico을

도움말 파일과 관련 ?dots하여 저에게는 작동하지 않지만 작동합니다 ?'...'.
coip

54

시작하기위한 간단한 예입니다.

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

함수 f는 첫 번째 입력 인수를 제외한 모든 인수를 줄임표 변수에 저장합니다. 콘텐츠에 액세스하려면 목록 (1)으로 변환하는 것이 가장 쉽습니다. 그러나 주된 용도는 변환이 필요없는 하위 함수에 인수를 전달하는 것입니다 (2).


# 2에서 같은 f 함수를 다시 호출하는 이유는 무엇입니까?
Jiapeng Zhang

1
@JiapengZhang 재귀 함수의 예입니다. f()매번 다른 인수로 반복적으로 호출됩니다. 코드를 실행하고 무슨 일이 일어나고 있는지 이해할 수 있는지 확인하십시오.
Richie Cotton

2
이것은 증명하는 좋은 예가 될 것 ...length()뿐만 아니라
MichaelChirico

19

"R 언어 정의"섹션 2.1.9 Dot-dot-dot로 이동해야 합니다. R 설치와 함께 제공됩니다. help.start()대화식 세션에서 실행 하여 HTML 도움말을 표시하고 R 언어 정의 링크를 클릭하십시오. 메인 사이트에서도 PDF 또는 HTML 버전을 사용할 수 있습니다 .

어쨌든, ...함수의 지정되지 않은 형식 인수를 일치시키는 데 사용됩니다.

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 

보시다시피 함수 trim = .5의 공식 인수로 지정되지 않았지만 전달 했습니다 sapply.

(이 예제는 사소한 것이므로 sapply(mtcars, median)동일한 결과를 얻기 위해 사용할 수 있습니다.)


1
지정되지 않은 경우 합법적이거나 유효한지 어떻게 알 수 있습니까?
qed aug.

@qed trimmean함수에 대한 인수 입니다. 은 ...sapply대한 메커니즘 trim에 전달하는 mean.
Richie Cotton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.