R sink为.csv,具有预定义的宽度

rqdpfwrv  于 2023-09-28  发布在  其他
关注(0)|答案(2)|浏览(75)

我有一个R脚本,它使用sink将 Dataframe 和其他一些行导出到.csv文件。另一个脚本从以这种方式导出的多个csv中收集数据。
这些脚本需要由多个用户使用,虽然这个过程对我来说很好,但当我要求其他人运行它时,它会引入错误。
原因似乎是接收器函数显然以RStudio中控制台窗口的宽度导出 Dataframe ,因此如果 Dataframe 的宽度太宽,它会以与打印到控制台窗口完全相同的方式将其 Package 在多行上。因此,第二个脚本无法定位它要查找的数据。
是否可以确保输出到.csv时不考虑显示窗口的宽度,并使文件的宽度足以存储所有列,而不管用户是谁,也不管他们在RStudio或其他地方有什么设置?
Edit:下面是一些重现问题的示例代码:

my.df <- data.frame(a = c(1:10), 
       b = c(1:10),
       c = c(1:10),
       d = c(1:10), 
       e = c(1:10), 
       f = c(1:10), 
       g = c(1:10), 
       h = c(1:10), 
       i = c(1:10), 
       j = c(1:10))
sink(file = "test.txt")
print("title information")
print(my.df)
cat("\n")
print("... some other lines...")
sink(file = NULL)

在1)宽屏幕布局和2)窄屏幕布局下运行这段代码,会在文本文件中产生不同的输出。

2ul0zpep

2ul0zpep1#

sink不适用于创建报告。正如我在评论中建议的那样,使用knitr。以下是使用RStudio的方法:
步骤1.创建一个R Notebook文件。
步骤2.文件内容应该如下所示(根据需要进行自定义,例如,通过设置输出的宽度):

---
title: "title information"
output:
  html_document:
    df_print: paged
    code_download: true
---
```{r, echo = FALSE, comment = ""}
my.df <- data.frame(a = c(1:10), 
       b = c(1:10),
       c = c(1:10),
       d = c(1:10), 
       e = c(1:10), 
       f = c(1:10), 
       g = c(1:10), 
       h = c(1:10), 
       i = c(1:10), 
       j = c(1:10))
print(my.df)

... some other lines...


步骤3.编织文件。这将创建一个HTML文件,您的客户可以在他们的互联网浏览器中查看。我们已经嵌入了Markdown代码,即当您查看HTML文件时有一个下载按钮。
步骤4.您可以恢复创建数据的代码.帧与`knitr::purl("test.Rmd", documentation = 0)` .您可能希望在markdown文件中使用`dput`。
我推荐R Markdown Cookbook:[https://bookdown.org/yihui/rmarkdown-cookbook/](https://bookdown.org/yihui/rmarkdown-cookbook/)
ozxc1zmp

ozxc1zmp2#

对于其他感兴趣的各方,可以使用线来设置宽度:

options(width=400)

在使用sink()命令之前。

相关问题