왜 R의 ifelse 문은 벡터를 반환할 수 없습니까?
저는 가끔 R의 생전 진술이 꽤 유용하다는 것을 알게 되었습니다.예:
ifelse(TRUE,1,2)
# [1] 1
ifelse(FALSE,1,2)
# [1] 2
하지만 저는 다음과 같은 행동에 다소 혼란스럽습니다.
ifelse(TRUE,c(1,2),c(3,4))
# [1] 1
ifelse(FALSE,c(1,2),c(3,4))
# [1] 3
이것이 제 월급 이상의 디자인 선택인가요?
다음에 대한 설명서ifelse
상태:
ifelse
다음과 같은 모양의 값을 반환합니다.test
다음 중 하나에서 선택된 요소로 채워집니다.yes
또는no
의 요소에 따라test
이라TRUE
또는FALSE
.
길이 1의 검정 값을 통과하기 때문에 길이 1의 결과를 얻을 수 있습니다.더 긴 테스트 벡터를 통과하면 더 긴 결과를 얻을 수 있습니다.
> ifelse(c(TRUE, FALSE), c(1, 2), c(3, 4))
[1] 1 4
그렇게ifelse
불리언의 벡터를 테스트하고 (아래)에서 가져온 요소로 채워진 동일한 길이의 벡터를 반환하는 특정 목적을 위한 것입니다.yes
그리고.no
논쟁들.
함수의 이름 때문에 일반적으로 일반적인 혼동입니다. 정말로 정상적인 것을 원할 때 이것을 사용하는 것입니다.if () {} else {}
대신 건설.
당신은 간단한 것을 원할 것입니다.if
대신 진술ifelse
R 단위로,if
단순한 제어 흐름 구조가 아니라 값을 반환할 수 있습니다.
> if(TRUE) c(1,2) else c(3,4)
[1] 1 2
> if(FALSE) c(1,2) else c(3,4)
[1] 3 4
내부에서 결과를 할당하면 문제를 피할 수 있습니다.ifelse
:
ifelse(TRUE, a <- c(1,2), a <- c(3,4))
a
# [1] 1 2
ifelse(FALSE, a <- c(1,2), a <- c(3,4))
a
# [1] 3 4
예를 들어 if를 사용합니다.
> `if`(T,1:3,2:4)
[1] 1 2 3
네, ifelse()는 테스트의 긴 벡터가 크고 두 가지 옵션 중 하나에 각각 매핑하고 싶을 때를 위해 설계되었다고 생각합니다.예를 들어 다음과 같은 방법으로 플롯()에 대한 색상을 자주 수행합니다.
plot(x,y, col = ifelse(x>2, 'red', 'blue'))
검정의 긴 벡터가 크지만 출력을 위한 쌍을 원하는 경우 다음을 사용할 수 있습니다.sapply()
또는plyr
의llply()
아니면 뭔가, 아마도.
때때로 사용자가 필요로 하는 것은switch
대신 진술ifelse
이 경우:
condition <- TRUE
switch(2-condition, c(1, 2), c(3, 4))
#### [1] 1 2
(이것은 Ken Williams 답변의 또 다른 구문 옵션입니다.)
다음은 Cath가 제안한 것과 유사한 접근 방식이지만 기존의 사전 할당된 벡터에서 작동할 수 있습니다.
이는 다음을 사용하는 것을 기반으로 합니다.get()
이와 같이:
a <- c(1,2)
b <- c(3,4)
get(ifelse(TRUE, "a", "b"))
# [1] 1 2
사용자의 경우, 사용if_else
부터dplyr
도움이 되었을 것입니다.if_else
보다 더 엄격합니다.ifelse
다음과 같은 오류가 발생합니다.
library(dplyr)
if_else(TRUE,c(1,2),c(3,4))
#> `true` must be length 1 (length of `condition`), not 2
모든 드롭다운 목록에서 찾을 수 있습니다.
ifelse(rep(TRUE, length(c(1,2))), c(1,2),c(3,4))
#>[1] 1 2
조건의 결과를 복제하여 원하는 길이를 반환할 수 있습니다.
언급URL : https://stackoverflow.com/questions/1335830/why-cant-rs-ifelse-statements-return-vectors
'programing' 카테고리의 다른 글
Apache POI를 사용한 Excel 드롭다운 목록 (0) | 2023.06.10 |
---|---|
파이썬, 유니코드 및 윈도우즈 콘솔 (0) | 2023.06.10 |
Typescript 객체 (0) | 2023.06.10 |
SSH 키 - 여전히 암호 및 암호 구문을 요청하는 중 (0) | 2023.06.10 |
플러그인 프로젝트: firebase_core_web을 찾을 수 없습니다. (0) | 2023.06.10 |