我想在文本文件中写一个列表,保留名称。
这与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
有什么想法吗?
非常感谢。
答案 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"
然后您可以使用write
或writeLines
。
答案 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