2014-11-18 2 views
12

강요에 관한 Hadley Wickham의 고급 R 섹션을 읽고 있는데이 질문에 대한 답을 이해할 수 없습니다. 나는 R이 문자에 2를가한다고 가정하고 있지만, 왜 R은 오류를 반환하는 대신 FALSE를 반환하는지 이해하지 못합니다. (이것은 -"one"이 TRUE를 반환하기 때문에 특히 당황 스럽습니다.) 그래서 제 질문은 두 가지입니다. 첫째, 왜이 대답과 두 번째로, R이 이러한 예와 같이 논리적 벡터 내에서 개별 요소를 어떻게 변환하는지 보는 방법이 있습니까?왜 "1"<2 ... FALSE가 R입니까?

+7

힌트 :'sort (c ("one", "2", "- 1", "10"))'(10은 필요하지 않지만 숙고 할 또 다른 예를 줄 수 있습니다 :' "10"< " 2 "') –

+1

이러한 종류의 단점은 모든 프로그래밍 언어에서 나타납니다. 항상 작업중인 데이터 유형을 처리하고 사과와 오렌지를 오렌지로 비교하십시오. –

+2

강요가 R에 널리 퍼져 있습니다. 약식 언어입니다. 해당 기능이 마음에 들지 않으면 Java를 사용하십시오. "<"가있는 문자를 볼 때 처음에는 첫 번째 문자의 로케일 특정 조합 순서를 첫 번째 문자와 비교합니다. 보세요 :''\ t9999 '< "00000"' –

답변

12

help("<")에서 :

두 인수가 서로 다른 종류의 원자 벡터 인 경우, 하나는 다른 하나의 유형으로 강요되며, 우선 순위는 (내림차순) 문자, 복합, 숫자, 정수, 논리 및 원시입니다.

그래서이 경우 숫자는 문자보다 우선합니다. 따라서 2은 문자 "2"으로 강제 변환됩니다. 문자 벡터의 문자열 비교는 사전 적으로 이해할 수 있듯이 알파벳이지만 로캘에 따라 달라집니다.

8

문자를 2로 변환 한 다음 알파벳순 비교를 수행합니다. 그리고 숫자 시도 행위에 대한 일반적인 아이디어를 얻을 알파벳 사람

전에 와서 가정

'a'<'1' 
'1'<'.' 
'b'<'B' 
'a'<'B' 
'A'<'B' 
'C'<'B' 
+1

어떤 일반적인 (즉, 로케일을 통해 보편적으로 사용)이 조합 순서에서 알파벳 문자 앞에 오는 것을 보장합니까? –

+0

감사합니다. 이것과 jdharrison에 의한 것 모두는 정확 합니다만, 나는 그 중 하나만 그렇게 할 수 있습니다. – JoeF

관련 문제