為什么R的ifelse語句不能返回向量?我發現R的ifelse陳述不時很方便。例如:ifelse(TRUE,1,2)# [1] 1ifelse(FALSE,1,2)# [1] 2但是我對以下行為感到困惑。ifelse(TRUE,c(1,2),c(3,4))# [1] 1ifelse(FALSE,c(1,2),c(3,4))# [1] 3這是一個超出我的薪資水平的設計選擇嗎?
3 回答

qq_笑_17
TA貢獻1818條經驗 獲得超7個贊
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 {}
結構時使用它。

慕碼人2483693
TA貢獻1860條經驗 獲得超9個贊
我打賭你想要一個簡單的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

守著星空守著你
TA貢獻1799條經驗 獲得超8個贊
請注意,如果在以下內容中分配結果,則可以避免此問題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
- 3 回答
- 0 關注
- 873 瀏覽
添加回答
舉報
0/150
提交
取消