我在尝试将数据框强制转换为R package DOSE提供的数据方面遇到了一些麻烦,因此我可以从包GO over-representation test
运行clusterProfiler clusterProfiler插图使用DOSE包中的geneList
;它的类是数字,但它以某种方式将基因表达计数与基因id相关联。
您可以通过执行以下操作来查看数据:
source("https://bioconductor.org/biocLite.R")
biocLite("DOSE")
data(geneList, package="DOSE")
class(geneList)
[1] "numeric"
dput(head(geneList))
structure(c(4.57261268231107, 4.51459371540294, 4.41821798112707,
4.14407518193211, 3.87625800905113, 3.67785700608222), .Names = c("4312",
"8318", "10874", "55143", "55388", "991"))
我有一个包含两列的data.frame:
dput(df)
structure(list(Gene_symbol = c(5339L, 1778L, 79026L, 5591L, 23224L,
23195L), HAP1_pc = c(170, 253, 221.5, 231, 163.5, 172)), .Names = c("Gene_symbol",
"HAP1_pc"), class = "data.frame", row.names = c(NA, -6L))
当我尝试将此数据框强制转换为数字类时,它会给我一个错误:
df2 <- as.numeric(df)
Error: (list) object cannot be coerced to type 'double'
我搜索了Stack Overflow这个错误,并从this here找到了一个建议:
as.numeric(df[[1]])
[1] 5339 1778 79026 5591 23224 23195
当然这只返回第一列(基因ID)。
由于原因,如果我用2替换它应该返回第2列(基因表达)
as.numeric(df[[2]])
[1] 170.0 253.0 221.5 231.0 163.5 172.0
确实如此。
让我感到困惑的是,当我尝试指定一个范围时,它会返回第一列的第二行:
as.numeric(df[[1:2]])
[1] 1778
在这篇文章的底部,有人说上述解决方案仅适用于一列(似乎是这种情况);但是,他们对多列(下面)的建议不起作用,因为它返回类matrix
:
apply(df, 2 , as.numeric)
Gene_symbol HAP1_pc
[1,] 5339 170.0
[2,] 1778 253.0
[3,] 79026 221.5
[4,] 5591 231.0
[5,] 23224 163.5
[6,] 23195 172.0
我尝试将此矩阵转换为数字,但这也不起作用。
foo <- apply(df, 2 , as.numeric)
bar <- as.numeric(foo)
bar
[1] 5339.0 1778.0 79026.0 5591.0 23224.0 23195.0 170.0 253.0 221.5 231.0 163.5 172.0
比较geneList和我的数据的输出,第一个明显的区别是我的list
,所以我在unlist()
之前尝试as.numeric()
as.numeric(unlist(df))
[1] 5339.0 1778.0 79026.0 5591.0 23224.0 23195.0 170.0 253.0 221.5 231.0 163.5 172.0
与将矩阵转换为上面的数字相同的结果。
两个dput()
的下一个显而易见的事情是,虽然我的数据有.Name
作为标题,但是geneList .Name
对于第1列中的每个值都是一个。这很可能是问题在于;但是,我不知道该怎么办。
如何用base R或使用`dplyr'来做到这一点?非常感谢您的帮助。