删除 R (flowCore) 中的 S4 class 列

Removing S4 class column in R (flowCore)

我使用 Bioconductor 中的包 flowCore,它以 S4 class 格式读取我的数据文件。您可以键入 library(flowCore),然后键入 data(GvHD) 以加载示例数据集。当您键入 GvHD 时,您可以看到该数据集由 35 个实验组成,可以通过键入 GvHD[[1]] 来单独访问这些实验。

现在我试图从 所有 实验中删除两列 FSC-HSSC-H,但我没有成功。

我试过myDataSet<- within(GvHD, rm("FSC-H","SSC-H")),但没用。如果有任何帮助,我将不胜感激。

rm 不适用于删除列。正常程序是将 NULL 分配给该列:

for (i in 1:35){
  GvHD[[i]][,c("FSC-H","SSC-H")] <- NULL
}

这与您对数据框所做的相同。

我在 flowCore 的相关 GitHub page 上发布了我的问题,答案由 Jacob Wagner.

提供

GvHD[[1]] 是一个 flowFrame,不是一个简单的数据框,这就是 NULL 赋值不起作用的原因。底层表示也是一个矩阵,它也不支持通过分配 NULL.

来删除列

如果您想要删除列,可以通过以下几种方式进行。请注意,对于所有这些,我正在对整个 flowSet 的列进行子集化,而不是遍历每个 flowFrame。但是您也可以对每个 flowFrame 执行这些操作。

如 Greg 所述,选择您要保留的列:

data(GvHD)
all_cols <- colnames(GvHD)
keep_cols <- all_cols[!(all_cols %in% c("FSC-H", "SSC-H"))]
GvHD[,keep_cols]

或者您可以只过滤子集:

GvHD[,!colnames(GvHD) %in% c("FSC-H", "SSC-H")]

您也可以获取要删除的数字索引,然后使用负子集。

# drop_idx <- c(1,2)
drop_idx <- which(colnames(GvHD) %in% c("FSC-H", "SSC-H"))
GvHD[,-drop_idx]