R 将包含不同类元素的列表写入文本文件
如何使用R基函数将不同类变量的列表写入文本文件 write和cat无法处理数据。frames和write.table仅针对表。它们都不能正确处理列表。 样本列表:R 将包含不同类元素的列表写入文本文件,r,R,如何使用R基函数将不同类变量的列表写入文本文件 write和cat无法处理数据。frames和write.table仅针对表。它们都不能正确处理列表。 样本列表: > test [[1]] [1] "a" "b" "c" [[2]] [1] "d" "e" "f" [[3]] [1] 1 2 3 [[4]] X.g. X.h. X.i. 1 g h i [[5]] [[5]][[1]] [1] "k" [[5]][[2]] [1] "l" [[5]][[3
> test
[[1]]
[1] "a" "b" "c"
[[2]]
[1] "d" "e" "f"
[[3]]
[1] 1 2 3
[[4]]
X.g. X.h. X.i.
1 g h i
[[5]]
[[5]][[1]]
[1] "k"
[[5]][[2]]
[1] "l"
[[5]][[3]]
[1] "m" "n"
[[6]]
[1] "2015-03-23 11:15:00 CET"
它由字符、数字、POSIXlttime变量和另一个列表组成
所需结果-类似以下内容的文本文件:
a b c
d e f
1 2 3
X.g. X.h. X.i.
1 g h i
k
l
m n
2015-03-23 11:15:00
我制作了一个脚本来按元素类处理列表,并将其逐个打印到文件中:
write_list <- function (outlist, outfile,append=FALSE) {
for (i in 1:length(outlist)) {
if (i==1) app=append else app=TRUE
if (is.character(outlist[[i]]) || is.numeric(outlist[[i]])) write(paste(outlist[[i]],collapse = " "),outfile, append=app)
else
if (is.data.frame(outlist[[i]])) write.table(outlist[[i]],outfile, append=app, quote=FALSE, sep="\t")
else
if (is.POSIXlt(outlist[[i]])) write (as.character(outlist[[i]]),outfile, append=app)
else
if (is.list(outlist[[i]])) write_list(outlist = outlist[[i]], outfile, append = TRUE)
}
}
最后一个if语句是一个递归调用,这是“列表列表”情况的一个例子。它调用自己的内部列表并按元素处理它
is.POSIXlt <- function (ts) {
isPOS=c("POSIXlt", "POSIXt")
identical (class(ts),isPOS)
}