R rownames(foo [bar])打印为空,但可以成功更改

我写了一个脚本,用于设置基因表达数据。 我会尽量在简短的问题和相当冗长的解释中分开我的文章(对于那个长文本块,抱歉)。 我希望这个简短的问题本身是有意义的。 长时间的解释只是为了澄清我在短题中是否得到了重点。

我试图获得基本的R技能,并且困扰我的事情发生了,我没有通过谷歌找到任何启​​发。 我真的不明白这一点。 我希望通过澄清在这里发生的事情,我可以更好地理解R.这说我不是程序员,所以请耐心等待我的错误代码。

简短的问题:

当我有rownames(foo)例如

> print(rownames(foo))
"a"     "b"     "c"     "d" 

我尝试通过打印来访问它(rownames(foo [bar]),它将它打印为空

> print(rownames(foo[2]))
NULL

Richie Cotton在第二个答案中解释说:“[...]在没有任何名字的地方,[......]”这对我来说表明,rownames(foo)是空的 - 这显然不是我可以用“print(rownames(foo))”打印它,或者这种访问方法失败。

但是,当我尝试更改位置栏上的值时,我收到警告消息,更换长度不匹配。 然而,这项行动仍然成功 - 这非常证明,这种访问方法确实是成功的。 例如

> bar = 2
> rownames(foo[bar]) = some.vector(rab)
> print(rownames(foo[bar])
NULL
> print(rownames(foo))
"a"     "something else"        "c"     "d" 

为什么这个工作? 很明显,函数不能正确访问foo中的bar的位置,因为它将其打印为空。 为什么它仍能成功替代价值,而不是以一种可怕的方式失败? 或者反过来问:当它成功替换此位置的值时,为什么打印功能没有正确返回值?

长背景说明:

数据源包含列表中的数字,基因的entrez-id,官方基因符号,affimetrix探针ID以及增加或减少的值。 它看起来像这样:

No  Entrez  Symbol  Probe_id    Sample1_FoldChange  Sample2_FoldChange
1   690244  Sumo2   1367452_at  1.02                0.19

稍后当显示数据时,我希望它只打印出基因符号和增加值。 现在,如果数据集中没有基因符号,它会被打印为“n / a”,这对我来说显然没有任何价值,因为我无法确定它是多少个基因中的哪一个。 因此,我做了第一个处理步骤,只有在这种情况下,将“n / a”结果与“n / a(12345)”交换,其中12345是entrez-id。

我已经写了下面的脚本来做到这一点。 (请注意,因为我不是程序员,而且我对RI很感兴趣,所以我怀疑它是漂亮的代码,但这不是我想讨论的重点。)

no.symbol.idx <-which(rownames(expr.table) == "n/a")
c1 <- character (length(rownames(expr.table)))
c2 <- c1
for (x in 1:length(c1))
{
    c1[x] <- "n/a ("
}
for (x in 1:length(c2))
{
    c2[x] <- ")"
}

rownames(expr.table)[no.symbol.idx] <- paste(c1, (expr.table[no.symbol.idx , "Entrez"]),c2, sep="")

该脚本起作用,它做它应该做的事情。 但是,我收到以下错误消息。

Warning message:
In rownames(expr.table)[no.symbol.idx] <- paste(c1, (expr.table[no.symbol.idx,  :
  number of items to replace is not a multiple of replacement length

为了找出发生在这里的事情,我把一些文本输出到脚本中。

no.symbol.idx <-which(rownames(expr.table) == "n/a")
c1 <- character (length(rownames(expr.table)))
c2 <- c1
for (x in 1:length(c1))
{
    c1[x] <- "n/a ("
}
for (x in 1:length(c2))
{
    c2[x] <- ")"
}
print("print(rownames(expr.table)):")
print(rownames(expr.table))
print("print(no.symbol.idx):")
print(no.symbol.idx)
print("print(rownames(expr.table[no.symbol.idx])):")
print(rownames(expr.table[no.symbol.idx]))
print("print(rownames(expr.table[14])):")
print(rownames(expr.table[14]))
print("print(rownames(expr.table[15])):")
print(rownames(expr.table[15]))

cat("print(expr.table[no.symbol.idx,"Entrez"]):n")
print(expr.table[no.symbol.idx,"Entrez"])

rownames(expr.table)[no.symbol.idx] <- paste(c1, (expr.table[no.symbol.idx , "Entrez"]),c2, sep="")

print("print(rownames(expr.table)):")
print(rownames(expr.table))
print("print(rownames(expr.table[no.symbol.idx])):")
print(rownames(expr.table[no.symbol.idx]))

我在控制台中得到以下输出。

[1] "print(rownames(expr.table)):"
 [1] "Sumo2"  "Cdc37"  "Copb2"  "Vcp"    "Ube2d3" "Becn1"  "Lypla2" "Arf1"   "Gdi2"   "Copb1"  "Capns1" "Phb2"   "Puf60"  "Dad1"   "n/a"   
[1] "print(no.symbol.idx):"
[1] 15
[1] "print(rownames(expr.table[no.symbol.idx])):"
NULL
[1] "print(rownames(expr.table[14])):"
NULL
[1] "print(rownames(expr.table[15])):"
NULL

...(待续)显然no.symbol.idx为n / a值得到正确的位置。 当我尝试打印它时,它宣称此位置的rownames为空并返回NULL。 当我试图“手工”访问这个位置并使用expr.table [15]时,它也返回NULL。 然而这与n / a值无关,因为对于存储在位置14的值也是如此。

... (the continuation)
print(expr.table[no.symbol.idx,"Entrez"]):
[1] "116727"
[1] "print(rownames(expr.table)):"
 [1] "Sumo2"        "Cdc37"        "Copb2"        "Vcp"          "Ube2d3"       "Becn1"        "Lypla2"       "Arf1"         "Gdi2"        
[10] "Copb1"        "Capns1"       "Phb2"         "Puf60"        "Dad1"         "n/a (116727)"
[1] "print(rownames(expr.table[no.symbol.idx])):"
NULL

这是令我惊讶的结果。 尽管如此,它正在工作。 它声称一切都将是NULL,但操作是成功的。 我不明白这一点。

编辑:这是您希望我运行的功能的结果。

str(expr.table)
chr [1:15, 1:17] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "401" "690244" "114562" "60384" ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:15] "Sumo2" "Cdc37" "Copb2" "Vcp" ...
  ..$ : chr [1:17] "No" "Entrez" "Symbol" "Probe_id" ...


head(expr.table)


dput(head(expr.table,10))
structure(c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", 
"690244", "114562", "60384", "116643", "81920", "114558", "83510", 
"64310", "29662", "114023", "Sumo2", "Cdc37", "Copb2", "Vcp", 
"Ube2d3", "Becn1", "Lypla2", "Arf1", "Gdi2", "Copb1", "1367452_at", 
"1367453_at", "1367454_at", "1367455_at", "1367456_at", "1367457_at", 
"1367458_at", "1367459_at", "1367460_at", "1367461_at", "1.02000", 
"-1.04000", "1.03000", "-0.12000", "-0.02000", "-0.03000", "0.09000", 
"0.05000", "-0.09000", "0.16000", "0.19000", "0.11000", "-0.00425", 
"0.52000", "0.46000", "0.42000", "0.20000", "0.05000", "0.21000", 
"0.37000", "0.26000", "0.19000", "-0.03000", "0.35000", "0.34000", 
"0.07000", "0.00156", "0.12000", "0.08000", "0.16000", "0.59000", 
"0.20000", "-0.16000", "0.28000", "0.46000", "-0.15000", "0.00168", 
"0.23000", "-0.01000", "0.10000", "0.05000", "0.12000", "-0.00522", 
"0.58000", "0.23000", "0.06000", "0.01000", "0.07000", "-0.11000", 
"0.23000", "-0.03", "0.08", "0.09", "0.08", "0.11", "0.03", "-0.08", 
"0.02", "-0.05", "0.06", "0.03000", "-0.06000", "0.09000", "0.00940", 
"0.11000", "-0.09000", "0.04000", "-0.04000", "-0.09000", "0.01000", 
"0.04000", "-0.02000", "0.21000", "0.27000", "0.08000", "0.12000", 
"0.06000", "0.26000", "0.04000", "0.40000", "0.05000", "0.05000", 
"0.00897", "0.09000", "0.20000", "0.09000", "0.13000", "-0.03000", 
"-0.08000", "-0.01000", "0.050000", "0.020000", "0.050000", "-0.005390", 
"0.020000", "0.008080", "0.060000", "-0.030000", "-0.020000", 
"-0.000406", "0.50", "0.11", "0.06", "0.19", "0.21", "0.32", 
"0.15", "0.17", "0.14", "0.03", "-0.08000", "-0.11000", "-0.07000", 
"0.03000", "-0.04000", "0.02000", "-0.00444", "-0.07000", "-0.13000", 
"-0.11000", "0.25000", "0.15000", "0.22000", "0.74000", "0.39000", 
"0.36000", "-0.08000", "0.18000", "0.00865", "0.43000"), .Dim = c(10L, 
17L), .Dimnames = list(c("Sumo2", "Cdc37", "Copb2", "Vcp", "Ube2d3", 
"Becn1", "Lypla2", "Arf1", "Gdi2", "Copb1"), c("No", "Entrez", 
"Symbol", "Probe_id", "AA_HD_24h_FoldChange", "AAF_HD_24h_FoldChange", 
"APAP_HD_24h_FoldChange", "BBZ_HD_24h_FoldChange", "BCT_HD_24h_FoldChange", 
"BEA_HD_24h_FoldChange", "CBP_HD_24h_FoldChange", "CCL4_HD_24h_FoldChange", 
"CPA_HD_24h_FoldChange", "CSP_HD_24h_FoldChange", "DEN_HD_24h_FoldChange", 
"LS_HD_24h_FoldChange", "PCT_HD_24h_FoldChange")))

在这里我添加了我用于调试的文件。 这是它读入expr.table的数据。

No  Entrez  Symbol  Probe_id    AA_HD_24h_FoldChange    AAF_HD_24h_FoldChange   APAP_HD_24h_FoldChange  BBZ_HD_24h_FoldChange   BCT_HD_24h_FoldChange   BEA_HD_24h_FoldChange   CBP_HD_24h_FoldChange   CCL4_HD_24h_FoldChange  CPA_HD_24h_FoldChange   CSP_HD_24h_FoldChange   DEN_HD_24h_FoldChange   LS_HD_24h_FoldChange    PCT_HD_24h_FoldChange
1   690244  Sumo2   1367452_at  1.02    0.19    0.26    0.59    0.05    -0.03   0.03    0.04    0.05    0.05    0.5 -0.08   0.25
2   114562  Cdc37   1367453_at  -1.04   0.11    0.19    0.2 0.12    0.08    -0.06   -0.02   0.05    0.02    0.11    -0.11   0.15
3   60384   Copb2   1367454_at  1.03    -4.25E-003  -0.03   -0.16   -5.22E-003  0.09    0.09    0.21    8.97E-003   0.05    0.06    -0.07   0.22
4   116643  Vcp 1367455_at  -0.12   0.52    0.35    0.28    0.58    0.08    9.40E-003   0.27    0.09    -5.39E-003  0.19    0.03    0.74
5   81920   Ube2d3  1367456_at  -0.02   0.46    0.34    0.46    0.23    0.11    0.11    0.08    0.2 0.02    0.21    -0.04   0.39
6   114558  Becn1   1367457_at  -0.03   0.42    0.07    -0.15   0.06    0.03    -0.09   0.12    0.09    8.08E-003   0.32    0.02    0.36
7   83510   Lypla2  1367458_at  0.09    0.2 1.56E-003   1.68E-003   0.01    -0.08   0.04    0.06    0.13    0.06    0.15    -4.44E-003  -0.08
8   64310   Arf1    1367459_at  0.05    0.05    0.12    0.23    0.07    0.02    -0.04   0.26    -0.03   -0.03   0.17    -0.07   0.18
9   29662   Gdi2    1367460_at  -0.09   0.21    0.08    -0.01   -0.11   -0.05   -0.09   0.04    -0.08   -0.02   0.14    -0.13   8.65E-003
10  114023  Copb1   1367461_at  0.16    0.37    0.16    0.1 0.23    0.06    0.01    0.4 -0.01   -4.06E-004  0.03    -0.11   0.43
11  29156   Capns1  1367462_at  -0.23   0.32    0.11    0.13    -0.38   -0.15   -0.08   0.15    -0.18   0.2 0.13    -0.18   0.09
12  114766  Phb2    1367463_at  1.01E-003   0.29    0.41    0.59    0.05    -0.07   -0.13   -0.18   -0.28   -0.21   -0.22   -0.2    0.39
13  84401   Puf60   1367464_at  -0.05   0.33    0.14    0.3 0.03    0.02    8.96E-003   2.96E-003   -8.63E-003  -0.13   0.07    -0.15   0.44
14  192275  Dad1    1367465_at  0.22    -0.21   -0.19   -0.24   -0.47   -0.01   -0.09   0.68    -0.06   -0.08   0.02    -0.29   -0.25
401 116727  n/a 1367852_s_at    -0.34   -0.12   -0.06   -0.11   0.13    0.03    0.07    -0.18   0.08    -0.2    0.04    -0.04   0.06

Rownames中充满了基因符号,例如Sumo2代表第1号。脚本应该做什么(并且确实)用于401号条目,它应该将名称从n / a更改为n / a(116727)。 然而,发生了上述警告,我想了解这里发生了什么。


我假设你正在使用一个名为foodata.frame 。 在引擎盖下面, data.frame是一个向量列表,每个向量具有相同的长度。

  • 所以foo[2]foo的第二列作为数据框, foo[,2]foo的第二列作为向量。 rownames(foo)是一个向量,它的第二个术语是rownames(foo)[2]

  • 如果你想将foo的第二列作为数据框,那么你可以使用foo[2]或者foo[,2,drop=FALSE]print(rownames(foo[2]))给出和print(rownames(foo))相同的结果print(rownames(foo))

  • 如果你想让第二行foo作为数据框,那么你需要一个逗号,如foo[2,]print(rownames(foo[2,]))将给出与print(rownames(foo)[2])相同的结果print(rownames(foo)[2])

  • 如果您想更改原始foo数据框中foo第二行的名称,请尝试如下所示:

    rownames(foo)[2] = "example of new name for row 2"
    
    链接地址: http://www.djcxy.com/p/96261.html

    上一篇: R rownames(foo[bar]) prints as null but can be successfully changed

    下一篇: Hmisc tilde rowname