我是一位尝试学习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个等等...
非常感谢任何有关此问题的帮助。
答案 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"