当其中一个data.frame元素是R中的列表时,将data.frame打印到文件

时间:2014-10-28 20:04:57

标签: r

我是一位尝试学习R编程的生物学家,这是我关于stackoverflow的第一个问题。我一直试图找到这个问题的答案,但仍然没有达到目的。我在R中有一个包含两个元素的data.frame。第一个元素是人类基因ID的特征向量,第二个元素是包含每个基因的分数的列表

head(results)
gene_id                                                            Score
1    A1BG        3.2828283, 0.2378641, NA, 3.1857143, 9.6956522, 3.0759162
2   A2BP1            0.6417112, 0.6772069, 0.8581688, 1.9923954, 1.5723270
3     A2M                 2.826087, 1.115974, 4.392523, 3.165816, 1.422764
4  A4GALT            1.5883459, 1.9366197, 5.5967742, 0.8864038, 3.1920200
5   A4GNT 7.3592233, 1.3846154, 0.6046638, 4.7267081, 0.4980926, 3.4800000
6    AAA1            0.3452148, 0.9479344, 0.8114478, 6.0000000, 1.0670927
sapply(results, class)
gene_id       Score 
"character"      "list" 

我想将此data.frame打印到文件中,以便文件的每一行看起来像这样:

A1BG        3.2828283, 0.2378641, NA, 3.1857143, 9.6956522, 3.0759162

我试过了,但由于data.frame中存在一个列表,它显然无法正常工作:

> lapply(results, write, "results.txt", append=TRUE, ncolumns=1000)
Error in cat(list(...), file, sep, fill, labels, append) : 
argument 1 (type 'list') cannot be handled by 'cat'

请注意,该列表不能被强制转换为data.frame,因为每个基因的分数与其相关的分数不同,即某些基因有6个分数,有些基因有4个等等...

非常感谢任何有关此问题的帮助。

1 个答案:

答案 0 :(得分:1)

您可以将分数列强制转换为字符串,然后使用write.table存储您的data.frame:

 dat$score <- sapply(dat$score,paste,collapse=',')

实施例

dat <- 
  data.frame(id=1:3,score=I(list(1,1:2,1:3)))
dat$score <- 
  sapply(dat$score,paste,collapse=',')
write.table(dat,row.names=F)

# "id" "score"
#   1 "1"
#   2 "1,2"
#   3 "1,2,3"