【问题标题】:How to sink a for loop into pdf and txt file.如何将 for 循环放入 pdf 和 txt 文件。
【发布时间】:2014-10-21 18:47:32
【问题描述】:

我正在尝试运行一个 for 循环,将 pdf 和文本文件都放入一个单独的文件夹中。我的代码看起来像这样。

library(MASS)
library(QuantPsyc)

rm(list=ls())

dat1<-read.csv("C:/Users/tmf/Desktop/Extract/Childsupdated_NewFiredata.csv")
stn<-unique(dat1$Station.x)
Sumdat<-as.data.frame(matrix(nrow=length(unique(stn)),ncol=18))
names(Sumdat)<-c("Lake Id","Intercept_Pvalue","Temp_Pvalue","Psum_Pvalue","PCT_Pvalue","DF","Multiple R2","Temp_VariableImp","Psum_VariableImp","Pct_VariableImp","Total_variableImp","ModelP_Value")

sink()
for (i in 1:length(stn)) {
  dat2<-dat1[dat1$Station.x==stn[i],]
  pdf(paste("C:/Users/tmf/Desktop/Extract/Outputs 17 Oct/PPT_Ha_Sum_100/",stn[i],".pdf",sep=""))
  sink(paste("C:/Users/tmf/Desktop/Extract/Outputs 17 Oct/PPT_Ha_Sum_100/",stn[i],".txt",sep=""))
  print(stn[i])
}

不幸的是,循环最终保持打开状态或导致接收器堆栈已满错误,我认为这是一个小问题,但我希望有人可以帮助我修复循环错误或提出更简单的方法循环和下沉。

谢谢, 汤姆

【问题讨论】:

  • 你想完成什么? pdf() 设备用于图形...而且您永远不会关闭pdf() 设备或再次调用sink() 来关闭转移。试着问一个可以重现的问题。如果你只是想按站拆分 dat1 并输出一个分隔文件,还有更简单的方法。
  • 在你的循环中,当你完成对一个特定文件的写入后,你应该运行sink()来关闭接收器重定向和dev.off()来关闭打开的pdf图形设备。但正如@oropendola 所说,这是一种奇怪的做事方式。

标签: r loops pdf sink


【解决方案1】:

正如我所评论的,如果您只是尝试为每个“Station.x”输出单独的文件,那么您可以调整如下内容:

data(iris)
lapply(split(iris, iris$Species), 
function(x) write.table(x, file = sprintf('%s.txt', unique(x$Species))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多