R 추출 연산자 : [대 $ [중복]

Sep 28 2020

에 대한 차이점과 유사점에 관한 인터넷에서 여러 게시물이 있습니다 [및 $. $인터랙티브 용도로만 권장되지만 프로그래밍에는 권장되지 않는 게시물 이 있습니다. 그러나 이것이 선호하는지 또는이 아이디어 뒤에 설명이 있는지 이해하지 못합니다.

이제 이름 (예 :)으로 요소를 추출하는 경우 패키지 또는 함수를 작성한다고 가정 해 보겠습니다. mtcars[["mpg"]]왜 사용을 피해야 mtcars$mpg합니까?

답변

5 GregorThomas Sep 28 2020 at 17:42

[[와 사이에 실제로 중요한 두 가지 차이점이 있습니다 $.

  1. [[-문자열과 함께 작동합니다 (즉, 변수 대체를 지원함), $그렇지 않습니다. 당신이있는 경우 my_var = "mpg", 당신은 사용할 수 mtcars[[my_var]]있지만 사용하는 것이 방법이 없다 my_var와 함께 $.

  2. $부분 열 이름이 모호하지 않은 경우 자동 완성됩니다. mtcars$m반환됩니다 mpg열을 mtcars[["m"]]반환합니다 NULL. 여러 열이 "d"로 시작하기 때문에 mtcars$d반환됩니다 NULL.

# 1은 [[프로그래밍 을 더 유연 하게 만듭니다. 프로그래밍 방식에서 문자열로 저장된 열 이름으로 작업하는 것은 매우 일반적입니다.

# 2는 $더 위험합니다. 프로그래밍에서 축약 된 열 이름을 사용해서는 안되지만, 대화 형 사용에서는 훌륭하고 빠를 수 있습니다. (이 IDE를 사용하는 경우 RStudio의 자동 완성 기능에 큰 문제가 있습니다.)

2 StéphaneLaurent Sep 28 2020 at 17:40

$부분 검색을 수행라는 이름의 열이있는 경우 xxxdataframe에서를 dat다음 dat$xx반환됩니다 xxx열을 (당신은 또한이 없으면 xx열). 이것은 위험 할 수 있습니다.

저는 항상 [["..."]]또 다른 이유로 사용 합니다. 저는 RStudio를 사용하고 문자열에 대한 좋은 강조 표시가있는 반면 $.