将列表写入文本文件,保留名称,R

时间:2011-11-24 19:13:52

标签: list r

我想在文本文件中写一个列表,保留名称。

这与R: Print list to a text file类似,但我想在每行的开头打印出名称:

> print(head(mylist,2))
$first
[1] 234984  10354  41175 932711 426928
$second
[1] 1693237   13462

mylist.txt
first   234984  10354  41175 932711 426928
second  1693237   13462

有什么想法吗?

非常感谢。

4 个答案:

答案 0 :(得分:11)

cat函数将打印到设备(默认情况下为控制台)而不添加任何常用注释,但它不能接受列表作为参数,因此所有内容都需要是原子向量。 deparse( substitute()) gambit是恢复传递给函数的列表名称的方法。在函数内部使用names(x)无法恢复原始参数的名称。

 mylist <- list(first =c( 234984,  10354,  41175, 932711, 426928), 
                second =c(1693237, 13462))
 fnlist <- function(x){ z <- deparse(substitute(x))
                         cat(z, "\n")
                         nams=names(x) 
                   for (i in seq_along(x) ) cat(nams[i],  x[[i]], "\n")}
 fnlist(mylist)
mylist 
second 234984 10354 41175 932711 426928 
first 1693237 13462 

此版本将输出一个文件(如果您想要名称和值之间的标签,则可以替换“\ t”

fnlist <- function(x, fil){ z <- deparse(substitute(x))
                         cat(z, "\n", file=fil)
                         nams=names(x) 
                   for (i in seq_along(x) ){ cat(nams[i], "\t",  x[[i]], "\n", 
                                            file=fil, append=TRUE) }
                         }
 fnlist(mylist, "test")

答案 1 :(得分:6)

您可以通过以下方式获取所需字符串的向量:

sapply(names(mylist),function(x) paste(x,paste(mylist[[x]],collapse=" ")))
                                   first 
"first 234984 10354 41175 932711 426928" 
                                  second 
                  "second 1693237 13462"

然后您可以使用writewriteLines

撰写

答案 2 :(得分:2)

如果您想要保存列表以供将来在R中使用,请考虑rlist包。

放:

library("rlist")
list.save(mylist, "mylist.rds")

然后您可以使用以下命令恢复列表,包括姓名:

mylist <- list.load("mylist.rds")

&#34; .rds&#34;不会提供文本文件,但可以完全恢复。 &#34; .yaml&#34;将给出一个文本文件,但重新加载后会丢失一些数据结构。 &#34;上传.json&#34;尽管文本文件可能不那么易读,但嵌套列表结构可能会简化(例如list(1, 2, 3)将成为向量1:3)。

答案 3 :(得分:0)

@ 42 -

添加到42 - 的答案(应该是评论,但我无法格式化代码)

我还需要打印列表中向量元素的名称,所以我在cat语句上面添加了这一行,如下所示:

mylist <- list(first =c( a = 234984,  b = 10354,  c = 41175, d = 932711, e = 426928), 
           second =c( A = 1693237, B = 13462))


fnlist <- function(x, fil){ z <- deparse(substitute(x))
cat(z, "\n", file=fil)
nams=names(x) 
for (i in seq_along(x) ){ 
  cat("", "\t", paste(names(x[[i]]), "\t"), "\n", file=fil, append=TRUE)
  cat(nams[i], "\t",  x[[i]], "\n", file=fil, append=TRUE) }
}
fnlist(mylist, "test")

结果

mylist 
         a      b     c      d     e     
first    234984 10354 41175 932711 426928 
         A       B   
second   1693237 13462