meta_file <-data.frame(meta_file[!apply(is.na(meta_file) | meta_file=="",1,all),,drop=FALSE])
這行 R 代碼的作用是從元數(shù)據(jù)框(meta_file)中移除那些 “全部元素都是缺失值(NA)或空字符串("")” 的行,保留至少包含一個(gè)有效信息的行。
逐部分解析:
is.na(meta_file) | meta_file==""
對(duì)元數(shù)據(jù)框meta_file進(jìn)行元素級(jí)判斷:
is.na(meta_file):識(shí)別所有缺失值(NA)的位置,返回與原數(shù)據(jù)框同結(jié)構(gòu)的邏輯矩陣(TRUE表示該位置是 NA)。
meta_file=="":識(shí)別所有空字符串("")的位置,同樣返回邏輯矩陣(TRUE表示該位置是空字符串)。
|(或) 連接兩個(gè)矩陣,最終得到一個(gè)邏輯矩陣:某位置為T(mén)RUE表示該位置是 NA 或空字符串。
apply(..., 1, all)
apply函數(shù)?按行(1表示行,2表示列)處理上述邏輯矩陣:
all函數(shù)?判斷 “一行中所有元素是否都為T(mén)RUE”(即整行都是 NA 或空字符串)。最終返回一個(gè)邏輯向量,長(zhǎng)度等于原數(shù)據(jù)框的行數(shù):TRUE表示該行是 “全 NA 或全空字符串”,F(xiàn)ALSE表示該行至少有一個(gè)有效值。
!?對(duì)上述邏輯向量取反:TRUE變?yōu)镕ALSE,F(xiàn)ALSE變?yōu)門(mén)RUE。此時(shí),TRUE表示 “該行需要保留”(非全 NA / 非全空)。
meta_file[..., , drop=FALSE]
用取反后的邏輯向量對(duì)原數(shù)據(jù)框meta_file進(jìn)行行篩選,保留TRUE對(duì)應(yīng)的行。
drop=FALSE?是為了確保篩選結(jié)果始終保持?jǐn)?shù)據(jù)框(data.frame)格式,避免當(dāng)結(jié)果只剩一行時(shí)自動(dòng)轉(zhuǎn)換為向量。
meta_file[..., ]? ?這是 R 中數(shù)據(jù)框的索引語(yǔ)法,用于篩選行或列:
逗號(hào)前的?...?代表 “行篩選條件”(此處是前面提到的邏輯向量,用于判斷哪些行需要保留)。
逗號(hào)后的空白(即第二個(gè)位置為空)表示 “保留所有列”(不篩選列)。例如:meta_file[rows_to_keep, ]?表示 “保留?rows_to_keep?對(duì)應(yīng)的行,同時(shí)保留所有列”。
drop=FALSE??這是數(shù)據(jù)框索引時(shí)的一個(gè)關(guān)鍵參數(shù),作用是控制結(jié)果的數(shù)據(jù)類(lèi)型:
當(dāng)?drop=FALSE?時(shí):無(wú)論篩選后的數(shù)據(jù)框只剩一行還是一列,結(jié)果始終保持?jǐn)?shù)據(jù)框(data.frame)格式。
當(dāng)?drop=TRUE(默認(rèn)值)時(shí):如果篩選后只剩一行或一列,R 會(huì)自動(dòng)將其轉(zhuǎn)換為向量(vector),丟失數(shù)據(jù)框的結(jié)構(gòu)。