我發現R的ifelse語句非常方便。例如:爲什麼R的ifelse語句不能返回向量?
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
這是一個設計選擇是否高於我的薪酬等級?
我發現R的ifelse語句非常方便。例如:爲什麼R的ifelse語句不能返回向量?
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
也許你真正想要的第二組陳述是'if(TRUE)c(1,2)else c(3,4)'。 – 2009-08-26 16:33:13
是的,我想ifelse( )是專爲當你有一個很長的測試向量,並希望將每個映射到兩個選項之一而設計的。例如,我經常做的陰謀色彩()以這樣的方式
plot(x,y, col = ifelse(x>2, 'red', 'blue'))
如果你有一個測試的大長向量,但希望對爲輸出,你可以使用sapply()
或plyr
的llply()
什麼的,也許。
我敢打賭,你想要一個簡單的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
你先生是一個救命的人,謝謝 – fuadj 2017-12-01 19:41:09
@Ken,這對我有用,即使我得到我需要的一個常量警告'「警告if(req(inputval)==」All「){: 條件長度> 1,只有第一個元素將被使用「'我應該怎麼做才能擺脫這個警告? – user5249203 2018-01-05 21:23:07
有時候,用戶只需要一個switch
聲明而不是ifelse
。在這種情況下:
condition <- TRUE
switch(2-condition, c(1, 2), c(3, 4))
#### [1] 1 2
(這是肯·威廉姆斯的回答另一種語法選項)
有點奇怪設計ifelse鑑於簡單,如果其他人的作品。 – 2sb 2012-06-29 03:55:00
ifelse是一個矢量化函數。他們應該用於不同的任務。 – marbel 2014-01-11 05:07:19