서브셋보다 []이 더 좋은 이유는 무엇입니까?
data.frame을 필터링해야 할 때(즉, 특정 조건에 맞는 행을 추출해야 할 때),subset
함수:
subset(airquality, Month == 8 & Temp > 90)
그보다는.[
함수:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
제가 선호하는 이유는 크게 두 가지입니다.
코드가 왼쪽에서 오른쪽으로 더 잘 읽힙니다.심지어 R에 대해 아무것도 모르는 사람들도 무엇이
subset
위의 진술이 하고 있습니다.열을 변수로 참조할 수 있기 때문입니다.
select
식, 키 입력 몇 개를 저장할 수 있습니다.위의 예에서는 다음을 입력하기만 하면 되었습니다.airquality
와 한 번만subset
하지만 세 번이나[
.
그래서 저는 행복하게 살고 있었습니다.subset
모든 곳에서 그것은 더 짧고 더 읽기 때문에, 심지어 내 동료 R 코더들에게 그것의 아름다움을 옹호합니다.하지만 어제 내 세상은 산산조각이 났습니다.책을 읽는 동안subset
설명서, 다음 섹션이 표시됩니다.
경고
이 기능은 대화형으로 사용하기 위한 편의 기능입니다.프로그래밍의 경우 [와 같은 표준 부분 집합 함수를 사용하는 것이 좋으며, 특히 인수 부분 집합의 비표준 평가는 예상치 못한 결과를 초래할 수 있습니다.
저자들이 의미하는 바를 명확히 해줄 수 있는 사람이 있습니까?
첫째, "대화형 사용"이란 무엇을 의미합니까?BATCH 모드에서 실행되는 스크립트와 달리 대화형 세션이 무엇인지는 알고 있지만 어떤 차이가 있어야 하는지는 모르겠습니다.
그렇다면 "논쟁 부분 집합의 비표준 평가"와 그것이 왜 위험한지 설명해 주시겠습니까, 예를 들어 주시겠습니까?
이 질문은 @James의 댓글에서 잘 답변되었으며, 위험에 대한 Hadley Wickham의 훌륭한 설명을 가리켰습니다.subset
(그리고 그것과 같은 기능) [여기].읽어보세요!
다소 긴 읽기이므로 해들리가 "무엇이 잘못될 수 있는가?"라는 질문을 가장 직접적으로 다루는 예를 여기에 기록하는 것이 도움이 될 수 있습니다.":
Hadley는 다음과 같은 예를 제안합니다. 다음 함수를 사용하여 데이터 프레임을 부분 집합화한 다음 재정렬하려고 합니다.
scramble <- function(x) x[sample(nrow(x)), ]
subscramble <- function(x, condition) {
scramble(subset(x, condition))
}
subscramble(mtcars, cyl == 4)
그러면 다음 오류가 반환됩니다.
eval(expr, envir, enclos)에서 오류 발생: 개체 'cyl'을(를) 찾을 수 없습니다.
왜냐하면 R은 더 이상 '실'이라는 물체를 어디서 찾아야 할지 모르기 때문입니다.그는 또한 지구 환경에 '실'이라는 물체가 우연히 존재할 경우 일어날 수 있는 참으로 기이한 일들을 지적합니다.
cyl <- 4
subscramble(mtcars, cyl == 4)
cyl <- sample(10, 100, rep = T)
subscramble(mtcars, cyl == 4)
(그것들을 실행하고 직접 보세요, 그것은 꽤나 미친 짓입니다.)
도.[
빠릅니다.
require(microbenchmark)
microbenchmark(subset(airquality, Month == 8 & Temp > 90),airquality[airquality$Month == 8 & airquality$Temp > 90,])
Unit: microseconds
expr min lq median uq max neval
subset(airquality, Month == 8 & Temp > 90) 301.994 312.1565 317.3600 349.4170 500.903 100
airquality[airquality$Month == 8 & airquality$Temp > 90, ] 234.807 239.3125 244.2715 271.7885 340.058 100
언급URL : https://stackoverflow.com/questions/9860090/why-is-better-than-subset
'programing' 카테고리의 다른 글
자동 완성(Angular4+)에서 다중 선택을 하는 방법이 있습니까? (0) | 2023.06.13 |
---|---|
SUMIF 기능에 대한 명명된 범위의 특정 열 선택 (0) | 2023.06.08 |
값 집합 정렬 (0) | 2023.06.08 |
루비에서 '예외 => e를 구출하는 것은 왜 나쁜 스타일인가요? (0) | 2023.06.08 |
Android:소프트 키보드가 내 보기를 위로 밀어 올리는 것을 방지하려면 어떻게 해야 합니까? (0) | 2023.06.08 |