我正在嘗試運行一個ifelse()命令,但出現了一些奇怪的行為......
跑步:
1 <= 50
我得到:
真的
哪里typeof(1 <= 50)和class(1 <= 50)回傳
[1] “邏輯”
然而,一旦我把它放到一個ifelse()回圈中,我就會得到一些奇怪的行為......
ifelse(1 <= 50, print("Yay"), print("Boo"))
[1] “耶”
[1] “耶”
它列印兩次真實的條件動作......
我想這就是我收到此錯誤的原因:
ans[ypos] <- rep(yes, length.out = len)[ypos] 中的錯誤:子賦值型別修復中的型別不兼容(從 S4 到邏輯)
當我撰寫更復雜的代碼時:
ifelse(length(List[[1]]) >= 50, List[[1]][1], print("Error"))
這很有趣,因為如果我使用 yes 陳述句ifelse()為變數賦值,我仍然收到錯誤但結果物件是正確的....
> ifelse(length(List[[1]]) >= 50, test <- List[[1]][1], print("Error"))
> test
我有什么不明白的......
uj5u.com熱心網友回復:
您有點誤解了 的目的ifelse():此函式用于從兩個向量/矩陣中的任何一個中選取元素。在線幫助是這樣描述的:
ifelse 回傳一個與 test 具有相同形狀的值,其中填充了從 yes 或 no 中選擇的元素,具體取決于 test 的元素是 TRUE 還是 FALSE。
允許使用有副作用的引數,但有點奇怪。我相信你應該if ... else用于你的情況。
那么這是為了ifelse(1 <= 50, print("Yay"), print("Boo"))什么呢?第一個引數是一個數字(長度為 1 的向量),只有值TRUE。所以ifelse()回傳單個元素。由于值為TRUE,它從第二個引數中獲取值。這會列印"Yay",但也會回傳"Yay"到ifelse()函式。"Yay"然后將回傳的值選擇為輸出并從ifelse()呼叫中回傳。呼叫完成后,此結果將列印到終端,為您提供第二行"Yay".
uj5u.com熱心網友回復:
原因是,ifelse()做兩件事:列印和回傳。
參見功能描述print。
-->print列印其引數并隱形回傳(通過 invisible(x))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/386311.html
