R 行名称的结果非常奇怪。这是虫子吗?

R 行名称的结果非常奇怪。这是虫子吗?,r,R,我有一个包含此内容的文件(以选项卡分隔): 我加载了以下内容: jo <- read.table("tmp.tsv",header=T,row.names=1,sep="\t") 我得到行名“chrF1_18000000”: 注意不同的零数。重新表述问题:虽然行名称“chrF1_180000”或“chrF1_180”不存在,但R返回“chrF1_18000000” 我已经在两台不同的机器(linux和mac)上使用了不同的R版本(3.0.1(2013-05-16)和R版本2.15.2(2

我有一个包含此内容的文件(以选项卡分隔):

我加载了以下内容:

jo <- read.table("tmp.tsv",header=T,row.names=1,sep="\t")
我得到行名“chrF1_18000000”:

注意不同的零数。重新表述问题:虽然行名称“chrF1_180000”或“chrF1_180”不存在,但R返回“chrF1_18000000”

我已经在两台不同的机器(linux和mac)上使用了不同的R版本(3.0.1(2013-05-16)和R版本2.15.2(2012-10-26))

这种行为完全出乎我的意料(并且是我脚本中许多错误的原因)。这是虫子吗

谢谢!
Federico

按行名称对a
数据进行子集设置。帧
使用部分匹配,如下所述:

[和[[提取方法]都部分匹配行名称。默认情况下 两者都不部分匹配列名,但[[如果精确=FALSE,则将匹配] (如果精确=NA,则带有警告)。如果要在 行名称使用匹配,如示例中所示

如果需要精确匹配,可以使用以下功能,例如:

# partial matching does not work
jo[match("chrF1_18000",row.names(jo)),] 
#       chr bin EURO.hz
#   NA <NA>  NA      NA

# exact matching works
jo[match("chrF1_18000000",row.names(jo)),]
#                   chr      bin EURO.hz
#  chrF1_18000000 chrF1 18000000     410
#部分匹配不起作用
jo[匹配(“chrF1_18000”,行名称(jo)),]
#chr bin EURO.hz
#娜娜娜
#精确匹配工作
jo[匹配(“chrF1_18000000”,行名称(jo)),]
#chr bin EURO.hz
#chrF1_18000000 chrF1 18000000 410

或使用
子集

 subset(jo, rownames(jo)=="chrF1_1800")
 #[1] chr     bin     EURO.hz
 #<0 rows> (or 0-length row.names)
 subset(jo, rownames(jo)=="chrF1_18000000")
   #             chr      bin EURO.hz
  #chrF1_18000000 chrF1 18000000     410

一些R专家似乎建议永远不要使用行名。我正在考虑他们的观点。
                 chr      bin EURO.hz
chrF1_18000000 chrF1 18000000     410
# partial matching does not work
jo[match("chrF1_18000",row.names(jo)),] 
#       chr bin EURO.hz
#   NA <NA>  NA      NA

# exact matching works
jo[match("chrF1_18000000",row.names(jo)),]
#                   chr      bin EURO.hz
#  chrF1_18000000 chrF1 18000000     410
 subset(jo, rownames(jo)=="chrF1_1800")
 #[1] chr     bin     EURO.hz
 #<0 rows> (or 0-length row.names)
 subset(jo, rownames(jo)=="chrF1_18000000")
   #             chr      bin EURO.hz
  #chrF1_18000000 chrF1 18000000     410
 jo[grep("\\<chrF1_1800\\>",row.names(jo)),]
 #[1] chr     bin     EURO.hz
 #<0 rows> (or 0-length row.names)