例如,我有一個內部沒有任何內容的數據框,但我需要它來運行完整代碼,因為它通常希望有數據。我試過這個,但沒有用
ifelse(dim(df_empty)[1]==0,rbind(Shots1B_empty,NA))
簡單的問題,OP,但實際上很有趣。您的代碼的所有元素都應該可以工作,但問題是當您按原樣運行時,它將返回一個列表,而不是一個數據框。讓我用一個例子告訴你:
growing_df <- data.frame(
A=rep(1, 3),
B=1:3,
c=LETTERS[4:6])
df_empty <- data.frame()
如果我們按照您所寫的進行評估,您將得到:
df <- ifelse(dim(df_empty)[1]==0, rbind(growing_df, NA))
與df
導致列表:
> class(df)
[1] "list"
> df
[[1]]
[1] 1 1 1 NA
代碼“有效”,但結果類df
是錯誤的。這很奇怪,因為這有效:
> rbind(growing_df, NA)
A B c
1 1 1 D
2 1 2 E
3 1 3 F
4 NA NA <NA>
答案是使用if
andelse
而不是ifelse()
,正如@akrun 在他們的回答中指出的那樣。的原因,如果你深入到發現文檔的ifelse()
:
ifelse 返回一個與 test 具有相同形狀的值,其中填充了從 yes 或 no 中選擇的元素,具體取決於 test 的元素是 TRUE 還是 FALSE。
由於dim(df_empty)[1]
和/或nrow(df_empty)
都是向量,因此結果將保存為列表。這就是為什麼if {}
有效,但不是ifelse()
在這裡。rbind()
結果通常是一個數據幀,但是df
分配時存儲到的結果的類ifelse()
是根據測試元素決定的,而不是結果元素。將其與if{}
語句進行比較,語句的結果元素取決於輸入到 中的任何表達式{}
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句