2014-01-08 154 views
0

我可以使用write.table函數從data.frame創建的輸出數據:如何創建自定義write.table函數?

> write.table(head(cars), sep = "|", row.names=FALSE) 
"speed"|"dist" 
4|2 
4|10 
7|4 
7|22 
8|16 
9|10 

如何創建它創建類似這樣(用雙管和數據頭輸出自己write.table功能與前面和後面管道)?:

||"speed"||"dist"|| 
|4|2| 
|4|10| 
|7|4| 
|7|22| 
|8|16| 
|9|10| 
+0

看一看'write.table'的代碼。你想要這個函數來寫入文件或在屏幕上顯示嗎? –

+0

我希望它寫入文件,例如write.table(head(cars),sep =「|」,file =「myfile.sep」) – jrara

+0

你能解釋一下'||「speed」||「dist」||'(我明白第一個雙管道是數據中有一列額外的行號,但不包含在標題中)。但其他兩個'||'的功能是什麼?所以你的頭裏有6個分隔符,但數據只有4個?否則,就像'write.pipetable < - function(obj,file)write.table(obj,file,sep =「|」)'是可能的答案。 (另外,如果你真的需要額外的分隔符和行首,你可以在左側和右側添加空列,並使用'na =「」' - – lebatsnok

回答

1

write.table可以讓你的方式的一部分,但你仍然需要做一些擺弄周圍,把事情給你只是工作想。

下面是一個例子:

x <- capture.output(
    write.table(head(cars), sep = "|", row.names = FALSE, eol = "|\n")) 
x2 <- paste0("|", x) 
x2[1] <- gsub("|", "||", x2[1], fixed=TRUE) 
cat(x2, sep = "\n") 
# ||"speed"||"dist"|| 
# |4|2| 
# |4|10| 
# |7|4| 
# |7|22| 
# |8|16| 
# |9|10| 

作爲一個功能,我想在其最基本的形式,它可能看起來像:

write.myOut <- function(inDF, outputFile) { 
    x <- capture.output(
    write.table(inDF, sep = "|", row.names = FALSE, eol = "|\n")) 
    x <- paste0("|", x) 
    x[1] <- gsub("|", "||", x[1], fixed=TRUE) 
    cat(x, sep = "\n", file=outputFile) 
} 
1

我不認爲這是可能的write.table。這裏是一個解決辦法:

# function for formatting a row 
rowFun <- function(x, sep = "|") { 
    paste0(sep, paste(x, collapse = sep), sep) 
} 

# create strings 
rows <- apply(head(cars), 1, rowFun) 
header <- rowFun(gsub("^|(.)$", "\\1\"", names(head(cars))), sep = "||") 

# combine header and row strings 
vec <- c(header, rows) 

# write the vector 
write(vec, sep = "\n", file = "myfile.sep") 

生成的文件:

||"speed"||"dist"|| 
|4|2| 
|4|10| 
|7|4| 
|7|22| 
|8|16| 
|9|10| 
+0

你想要什麼如果數據值的頭部包含「|」字符,或者如果頭部值包含一個「」字符,就會發生這種情況 –

+0

@RichieCotton只有OP可以回答這個問題,使用提供的代碼,'|'和''' s將被保存。 –

相關問題