r - 通过排除向量的所有值来对矩阵的列进行子集化

标签 r matrix vector subset

我有一个如下所示的矩阵:

> expressionMatrix

        Sample_1  Sample_2  Sample_3  Sample_4  Sample_5
Gene_1         1         2         3         4         5     
Gene_2         6         7         8         9        10 

还有一个向量:

outliers <- c("Sample_2",  "Sample_3")

如果我要求仅包含异常值中的样本的expressionMatrix子集,则效果很好:

subset(expressionMatrix, select=outliers)

            Sample_2  Sample_3  
    Gene_          2         3 
    Gene_2         7         8

但是,我似乎无法获得包含除异常值中的样本之外的所有样本的expressionMatrix子集。

我尝试过:

subset(expressionMatrix, select=-outliers)

但是返回一个错误:

Error in -(outliers) : invalid argument to unary operator

但是,直接要求排除向量中的值(不带引号)确实有效:

subset(expressionMatrix, select=-c(Sample_2,  Sample_3))

        Sample_1   Sample_4  Sample_5
Gene_1         1          4         5     
Gene_2         6          9        10 

我尝试通过将异常值转换为:

subset(expressionMatrix, select=-noquotes(outliers))

但是还是同样的错误。

Error in -noquote(outliers) : invalid argument to unary operator.

为什么subset函数在请求包含时接受向量对象,但在请求排除时不接受?

最佳答案

首先,这是一个测试对象

expressionMatrix<-as.data.frame(matrix(1:10, nrow=2,
    dimnames=list(paste("Gene",1:2,sep="_"), 
    paste("Sample",1:5, sep="_"))))

正如您不在子集的 subset= 参数中的列周围添加引号一样,您也应该在 select= 参数中添加不带引号的名称以及。 子集“神奇地”将名称转换为索引,因此

select=-c(Sample_2,  Sample_3)

转换为

select=-c(2,3)

您可以使用 dd[, -c(2,3)] 索引 data.frame 就可以了。但是,您始终无法将减号与字符向量一起使用。 “Netagive 索引”仅适用于整数值。如果您将字符向量传递给 select=,由于没有自由符号,因此它们不会解析为索引。因此,您最终得到的 dd[, -c("Sample_2", "Sample_3")] 不起作用。 (如果您传入 select=c("Sample_2", "Sample_3") ,它就会起作用,因为它处于“未翻译”状态并以 dd[, c("Sample_2", “Sample_3”)] 就可以了)。您可能会以困惑的方式构建调用

outliers<-as.call(c(`c`, lapply(c("Sample_2","Sample_3"), as.name)))
do.call("subset", list(quote(expressionMatrix), select=outliers))

但是如果你真的想使用字符串,你可以使用更传统的

outliers<-c("Sample_2","Sample_3")
expressionMatrix[, setdiff(names(expressionMatrix), outliers)]

关于r - 通过排除向量的所有值来对矩阵的列进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27996548/

相关文章:

matlab - 如何将矩阵划分为大小不等的子矩阵?

c - 如何使用openmp并行化代码以减少添加矩阵和

c++ - 获取STL vector C++的地址

c++ - 将空终止的 const char* 字符串数组转换为 std::vector< std::string >

Python的列表对象不允许索引值改变

r - 包含点的嵌套列表的名称(例如“c.2)

r - 将带有 html 的本地镜像添加到 Shiny 应用程序

r - 向量列表的顺序和

r - ggplot2:将 geom_bar 基线设置为 1 而不是零

opencv - 从OpenCV中的cv::Mat对象中减去固定值