我有如下資料框
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
