数据:
sam:
res = 0.25 , res1=0.30
bad:
res= 0.30 , res1=0.23
代码:
write.table(sam, file = "C:\\Users\\data1.txt", append = F, sep = " ", row.names = TRUE,col.names = TRUE)
write.table(bad, file = "C:\\Users\\data1.txt", append = T, sep = " ",row.names = TRUE, col.names = TRUE)
data1
的输出:
"x"
"1" 0.25
"x"
"1" 0.3
事实上,我希望文本文件data1
中的输出是这样的:
res res1
sam 0.25 0.30
bad 0.3 0.23
任何想法都表示赞赏!
答案 0 :(得分:2)
您可以在write.table()
中提供命名向量。您只需将第二组列名设置为FALSE
,因为它们已在第一次初始调用中提供。
sam <- 0.25; bad <- 0.30
write.table(c(sam = sam), col.names = "res", file = "data")
write.table(c(bad = bad), col.names = FALSE, file = "data", append = TRUE)
## read it back in
read.table("data")
# res
# sam 0.25
# bad 0.30
在回复您的评论时,您可以编写辅助函数,以便在初始化文件后执行附加操作。然后我们可以将其作为列表读取,以便我们可以在返回数据帧或矩阵之间进行选择。
sam <- 0.25
bad = 0.3
## initial file creation
write.table(cbind(sam, bad), "data", row.names = FALSE)
## function to append to 'data'
wtFun <- function(x) {
write.table(x, "data", append = TRUE, col.names = FALSE, row.names = FALSE)
}
## new values
sam2 <- 0.99
bad2 <- 25
## append new values
wtFun(cbind(sam2, bad2))
## read the file as a list and set the names
res <- setNames(
scan("data", what = list(0, 0), skip = 1L),
scan("data", what = "", nlines = 1L)
)
## 'res' as a matrix
do.call(rbind, res)
# [,1] [,2]
# sam 0.25 0.99
# bad 0.30 25.00
## 'res' as a data frame
as.data.frame(res)
# sam bad
# 1 0.25 0.3
# 2 0.99 25.0
答案 1 :(得分:1)
如果您将sam
和bad
写为data.frame
s(或矩阵),而不是原子,这将更有效。例如,
sam <- 0.25
bad <- 0.30
##
write.table(
data.frame(res=sam,row.names="sam"),
file="F:/temp/data1.txt",
append=F,sep=" ",
col.names=TRUE,
row.names=TRUE)
##
write.table(
data.frame(res=bad,row.names="bad"),
file="F:/temp/data1.txt",
append=T,sep=" ",
col.names=FALSE,
row.names=TRUE)
##
R> read.table("F:/temp/data1.txt",header=TRUE)
res
sam 0.25
bad 0.30
IMO虽然强制row.names
属性并不是一个好主意,因为如果你将一个对象附加到一个已经存在的行名的文件中,你就会收到一个错误尝试重新读取它,因为row.names
属性不能包含重复值。你最好做一些像
write.table(
data.frame(name="sam",res=sam),
file="F:/temp/data1.txt",
append=F,sep=" ",
col.names=TRUE,
row.names=FALSE)
##
write.table(
data.frame(name="bad",res=bad),
file="F:/temp/data1.txt",
append=T,sep=" ",
col.names=FALSE,
row.names=FALSE)
##
R> read.table("F:/temp/data1.txt",header=TRUE)
name res
1 sam 0.25
2 bad 0.30