我有如下資料框
monkey = data.frame(girl = 1:10, kn = NA, boy = 5)
我想逐步理解以下代碼含義
monkey %>%
mutate(t = ifelse(is.na(kn),.[,grepl('a',names(.))],ll))
提前感謝大家的支持。
uj5u.com熱心網友回復:
在我看來,這不是好的代碼,但我會嘗試解釋它在做什么。
is.na(kn)
(在 的背景關系中monkey
)回傳該列中的每個值是否為 的邏輯向量NA
,with(monkey, is.na(kn)) # [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
.
in的使用是.[grepl(*)]
指呼叫開始時的當前資料mutate
;使用 dplyr-canonicalcur_data()
會更完整(例如,考慮到以前.
無法識別的變異列,這里不是一個因素)。我相信這段.[*]
代碼試圖根據當前資料動態選擇一列。為什么這個不好: 1.這里 沒有名稱包含的列
"a"
;2. 可能有多個列名稱包含"a"
,這意味著yes=
引數 to將在新列ifelse
中生成嵌套框架;t=
3..[,*]
如果原始框架是 base-Rdata.frame
或者它是 tibble-variant ,則行為會發生變化tbl_df
:參見monkey[,1]
vstibble(monkey)[,1]
。no=
引數是指ll
未定義的物件。這應該(直觀地)失敗Error: object 'll' not found
或類似,但由于所有test=
論點都是正確的,no=
因此不需要它,因此它沒有被評估。考慮ifelse(c(TRUE, TRUE), 1:2, stop("oops"))
(無錯誤)與ifelse(c(TRUE, FALSE), 1:2, stop("oops"))
.
最終,此代碼的防御性不夠安全(base-vs-tibble 變體),其意圖尚不清楚。
我在使用時的建議dplyr
是使用dplyr::if_else
而不是 base R's ifelse
。一方面,ifelse
有一些問題和限制(例如,如何防止 ifelse() 將 Date 物件轉換為數字物件);另一方面,if_else
保護您免受諸如您的問題中的模棱兩可、不一致的結果代碼的影響。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/432494.html