基因表达样本聚类后异常样本筛选代码问题求助
问题分析与解决方案
你的问题出在逻辑判断的语法错误上,导致筛选条件完全不符合预期。我们一步步拆解:
错误原因
你写的代码:
keepSamples = (Cutreecluster_Sample==!0)
在R中,!0会被解析为逻辑值TRUE(因为R里0等价于FALSE,取反后就是TRUE)。所以这句代码实际等价于:
keepSamples = Cutreecluster_Sample == TRUE
而在R的类型转换规则中,只有数值1会被视为等同于TRUE,其他非0数值(比如2、3、4)和TRUE比较时都会返回FALSE。这就导致你只筛选出了聚类标签为1的24个样本,而非所有非0的71个样本。
正确的筛选代码
你需要直接判断聚类标签不等于0,有几种等价的正确写法:
方法1:直接使用不等于运算符(最直观)
keepSamples = Cutreecluster_Sample != 0
方法2:判断属于目标聚类标签集合
如果明确知道非0聚类是1-4,也可以用%in%:
keepSamples = Cutreecluster_Sample %in% c(1, 2, 3, 4)
方法3:利用聚类标签的非负性判断大于0
因为你的聚类标签都是非负整数,也可以这样写:
keepSamples = Cutreecluster_Sample > 0
验证与数据集筛选
运行上述任意一种代码后,再执行table(keepSamples),应该会得到:
keepSamples FALSE TRUE 1 71
之后用这个筛选向量处理你的数据集即可(假设datExprSTLMS是行代表基因、列代表样本的矩阵):
# 筛选非0聚类的样本 datExprSTLMS_filtered = datExprSTLMS[, keepSamples] # 如果你的数据集是行代表样本、列代表基因,就用: # datExprSTLMS_filtered = datExprSTLMS[keepSamples, ]
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

