首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建自定义write.table函数?

如何创建自定义write.table函数?
EN

Stack Overflow用户
提问于 2014-01-08 12:28:15
回答 2查看 846关注 0票数 0

我可以使用write.table函数从data.frame创建输出数据:

代码语言:javascript
复制
> write.table(head(cars), sep = "|", row.names=FALSE)
"speed"|"dist"
4|2
4|10
7|4
7|22
8|16
9|10

如何创建自己的write.table函数来创建这样的输出(头具有双管道,数据具有前面的和后续的管道):

代码语言:javascript
复制
||"speed"||"dist"||
|4|2|
|4|10|
|7|4|
|7|22|
|8|16|
|9|10|
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-08 13:25:15

write.table可以为您提供一部分,但您仍然需要做一些摆弄,以使事情按照您的意愿工作。

下面是一个例子:

代码语言:javascript
复制
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|

作为一个函数,我猜在其最基本的形式中,它可能看起来如下:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-01-08 12:46:31

我认为用write.table是不可能的。以下是一个解决办法:

代码语言:javascript
复制
# 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")

由此产生的档案:

代码语言:javascript
复制
||"speed"||"dist"||
|4|2|
|4|10|
|7|4|
|7|22|
|8|16|
|9|10|
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20995682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档