如何将具有一列的数据帧列表写入文件?

Way*_*ang 5 r

这是我的虚拟数据集:

dataset<-data.frame(a=c(1,2,3,4),b=c('a','b','c','d'), c=c("HI","DD","gg","ff"))
g=list(c("a","b"),c(2,3,4), c(44,33,11,22),c("chr","ID","i","II"))
dataset$l<-g
dataset

 a b  c              l
1 1 a HI           a, b
2 2 b DD        2, 3, 4
3 3 c gg 44, 33, 11, 22
4 4 d ff chr, ID, i, II

> mode(dataset$l)
[1] "list"
Run Code Online (Sandbox Code Playgroud)

当我尝试将数据集写入文件时:

> write.table(dataset, "dataset.txt", quote=F, sep="\t")
Error in write.table(x, file, nrow(x), p, rnames, sep, eol, na, dec, as.integer(quote),  : 
  unimplemented type 'list' in 'EncodeElement'
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

A5C*_*2T1 3

我可以考虑一些选择,具体取决于您想要实现的目标。

如果它仅用于显示,那么您可能只需要capture.output()sink(); 这些都不太方便读回 R:

capture.output(dataset, file="myfile.txt")
### Result is a text file that looks like this:
#   a b  c              l
# 1 1 a HI           a, b
# 2 2 b DD        2, 3, 4
# 3 3 c gg 44, 33, 11, 22
# 4 4 d ff chr, ID, i, II
sink("myfile.txt")
dataset
sink()
## Same result as `capture.output()` approach
Run Code Online (Sandbox Code Playgroud)

如果您希望能够将结果表读回到 R 中(尽管不保留列“ l”是一个列表的事实),您可以采取类似于 @DWin 建议的方法。

在下面的代码中,该dataset2[sapply...行标识了哪些变量是列表并将它们连接成一个字符串。因此,它们成为简单的字符变量,允许您使用write.table().

dataset2 <- dataset # make a copy just to be on the safe side
dataset2[sapply(dataset2, is.list)] <- apply(dataset2[sapply(dataset2, is.list)], 
                                             1, function(x) 
                                                 paste(unlist(x), 
                                                       sep=", ", collapse=", "))
str(dataset2)
# 'data.frame':    4 obs. of  4 variables:
#  $ a: num  1 2 3 4
#  $ b: Factor w/ 4 levels "a","b","c","d": 1 2 3 4
#  $ c: Factor w/ 4 levels "DD","ff","gg",..: 4 1 3 2
#  $ l: chr  "a, b" "2, 3, 4" "44, 33, 11, 22" "chr, ID, i, II"
write.table(dataset2, "myfile.txt", quote=FALSE, sep="\t")
# can be read back in with: dataset3 <- read.delim("myfile.txt")
Run Code Online (Sandbox Code Playgroud)