2012-06-16 2 views
16

이것은 나에게 꽤 나 빠졌어. 목록 이름을 축약 할 수 있습니까? 나는 전에 그것을 알아 차리지 못했고 나는 하루 하루를 완전히 망쳤습니다. 누군가 여기서 일어나는 일을 설명하고 그것이 끔찍한 것보다 더 유용한 이유는 무엇일까요? 왜 바닥에서 그처럼 일관성이 없습니까? 내가 그걸 끌 수 있다면?목록 이름을 생략 할 수 있습니까? 왜?

항목에 대한 정확한 일치가있을 경우, 사용 :

목록 요소 이름 (과 함수 매개 변수 이름)에 대한
> wtf <- list(whatisthe=1, pointofthis=2) 
> wtf$whatisthe 
[1] 1 
> wtf$what 
[1] 1 

> wtf <- list(whatisthe=1, whatisthepointofthis=2) 
> wtf$whatisthepointofthis 
[1] 2 
> wtf$whatisthep 
[1] 2 
> wtf$whatisthe 
[1] 1 
> wtf$what 
NULL 
+5

그것은 모순이 아니다. 고유 한 일치가있는 경우에만 이름의 선행 부분 문자열이 해석됩니다. –

+1

+1 이유는'왜'$'가 이런 방식으로 구현되는지 생각하게 해줍니다. –

+0

이것은 벨 연구소의 S 초창기로 거슬러 올라갑니다. 나쁘다.하지만 타이핑을 줄이기 위해 가끔 사용한다. 'predict (m, type = "resp")'또는'cor (x, y, use = "쌍")과 같은 함수 인자에서도 작동합니다. –

답변

16

내가 $ 운영자에 의해 부분 일치 다시 이전 탭 완성

을 구현했던 일이 그 행동을 좋아하지 않는 경우에 대화 형 사용을위한 좋은 (R) 기능이라고 생각, 당신은을 사용할 수 있습니다 대신 "[[" 연산자를 사용하십시오. 부분 일치 동작을 제어 할 수있는 exact= 인수를 사용하며 기본값은 TRUE입니다.

wtf[["whatisthep"]]     # Only returns exact matches 
# NULL 

wtf[["whatisthep", exact=FALSE]] # Returns partial matches without warning 
# [1] 2 

wtf[["whatisthep", exact=NA]]  # Returns partial matches & warns that it did 
# [1] 2 
# Warning message: 
# In wtf[["whatisthep", exact = NA]] : 
# partial match of 'whatisthep' to 'whatisthepointofthis' 

(이 "[["은 일반적으로 R 프로그래밍에 $ 선호되는 이유 중 하나입니다. 또 하나는이 X <- "whatisthe"; wtf[[X]]을 할 수 있지만하지이 X <- "whatisthe"; wtf$X.)

+0

대단히 고마워요. 자동 완성 기능이 도움이 될 것으로 확신하지만, 다소 불길한 느낌입니다. 나는 단지 다시 물기를 기다리고있다. – enfascination

+0

@ user1073999 - 동의합니다. 나는 심지어 초기의 디자인 결정과 관련하여 R의 주인공 중 일부를 보았지만 지금은 어디에서 기억할 수없는 것처럼 느낍니다. 나는 다른 누군가가 그것을 보았다면 나는 흥미로울 것이다. –

+2

더 생각해 보면, 탭 자동 완성이 구현되기 전에 대화 형 사용에서 도움이되었을 것입니다. –

2

는, R는 다음의 알고리즘을 적용합니다. 정확히 일치하는 것이 없으면 부분 일치를 찾습니다. 부분 일치가 정확히 하나만 있으면이를 사용하십시오. 그렇지 않으면 아무것도 사용하지 마십시오.

+0

완전한 알고리즘이 위치 매칭을 사용한다고 생각합니다. – Andrie

+0

당신은 정교 할 수 있습니까? a = 1, a = 2)에 오류가 있습니다. 예를 들어 '> a <- function (aa, ab) {paste (aa, ab, sep = ""}} = 2) : 여러 개의 실제 인수로 일치하는 공식 인수 "aa" –

+0

간단히 말해서 인수의 이름을 지정하지 않아도되며,이 경우 R은 위치 일치를 사용합니다. 인수 이름과 이름이없는 경우를 혼합 할 수 있으므로 완전한 대답을 내 의견으로 언급해야합니다. 그래서, 당신의 예제에서'a (1, ab = 2)'는'a (ab = 2, 1)'처럼 여전히 작동 할 것입니다. – Andrie