请教R语言数据框匹配取值代码逻辑及==运算符作用
解释这行R代码的运行原理
核心代码拆分分析:
gene_symbol <- id2symbol$gene_symbol[id2symbol$Ensembl == gene_id]
1. 先看 id2symbol$Ensembl == gene_id 部分
==在这里就是逐元素相等判断,没有其他特殊含义:
id2symbol$Ensembl是从data.frame中提取的一列,本质是一个字符向量(示例里为c("ENSG00000141510", "ENSG00000139618", "ENSG00000106462", "ENSG00000116288"))gene_id是函数传入的单个字符值(比如调用时的"ENSG00000141510")- R会自动将单个值与向量的每一个元素逐一比较,返回一个长度和原向量一致的逻辑向量(仅包含
TRUE/FALSE)。
拿示例中的函数调用来说,这部分会返回:
c(TRUE, FALSE, FALSE, FALSE)
因为只有id2symbol$Ensembl的第一个元素和传入的gene_id相等。
2. 再看用逻辑向量索引 id2symbol$gene_symbol
在R中,向量支持用逻辑向量做索引:
- 逻辑向量里的
TRUE标记需要保留的位置,FALSE标记要跳过的位置 - 所以
id2symbol$gene_symbol[上述逻辑向量],就是从gene_symbol列中取出对应TRUE位置的元素。
对应示例,就是取出id2symbol$gene_symbol的第一个元素"TP53",赋值给gene_symbol变量,最后函数返回这个值。
直观验证示例
如果传入的gene_id是"ENSG00000106462":
id2symbol$Ensembl == gene_id会返回c(FALSE, FALSE, TRUE, FALSE)- 索引后会取出
id2symbol$gene_symbol的第三个元素"EZH2"
内容的提问来源于stack exchange,提问作者Trubulica
相关产品推荐
相关产品推荐

