首页 > 解决方案 > R 遍历文件并写入结果

问题描述

我第一次尝试在 R 中迭代数据文件以进行分析并将输出写入文件。这是我的代码:

# load packages igraph, dils, sna
sink('analysis-output.txt')
for (week in c("002","003","004","005","006")) {
    cat("*** ",week,"\n")
    obs <- read.table(paste(week,"obs.txt",sep="-"),sep="\t", header=FALSE)
    per <- read.table(paste(week,"per.txt",sep="-"),sep="\t", header=FALSE)
    n <- length(obs)
    mper <- AdjacencyFromEdgelist(per, check.full = TRUE)
    mobs <- AdjacencyFromEdgelist(obs, check.full = TRUE)
    g<-array(c(mper[[1]],mobs[[1]]),c(n,n,2))
    q<-qaptest(g,gcor,g1=1,g2=2)
    summary(q)
}
sink()

当我运行这个时,没有错误,但是 analysis-output.txt 只包含 cat 函数的输出,即

***  002 
***  003 
***  004 
***  005 
***  006 

但是,当我像这样运行循环内部的代码时

sink('analysis-output.txt')
week = "002"
cat("*** ",week,"\n")
obs <- read.table(paste(week,"obs.txt",sep="-"),sep="\t", header=FALSE)
per <- read.table(paste(week,"per.txt",sep="-"),sep="\t", header=FALSE)
n <- length(obs)
mper <- AdjacencyFromEdgelist(per, check.full = TRUE)
mobs <- AdjacencyFromEdgelist(obs, check.full = TRUE)
g<-array(c(mper[[1]],mobs[[1]]),c(n,n,2))
q<-qaptest(g,gcor,g1=1,g2=2)
summary(q)
sink()

我确实在输出文件中得到了摘要结果:

***  002 

QAP Test Results

Estimated p-values:
    p(f(perm) >= f(d)): 0.355 
    p(f(perm) <= f(d)): 0.656 

Test Diagnostics:
    Test Value (f(d)): -0.09045692 
    Replications: 1000 
    Distribution Summary:
        Min:     -0.207416 
        1stQ:    -0.1971768 
        Med:     -0.1720356 
        Mean:    0.01895663 
        3rdQ:    0.1185298 
        Max:     0.9982945 

我究竟做错了什么?

标签: r

解决方案


sink将控制台输出转移到文件中,因此数据需要通过 R 输出才能出现在文件中。我认为缺少的是,在一个循环中,您需要显式地print输出summary以使其出现在控制台中(因此由接收器编写)。

比较这两个循环的控制台输出:

for (i in 1:5) {
    print(summary(cars))
}

将结果打印到控制台

for (i in 1:5) {
    summary(cars)
} 

不打印到控制台


推荐阅读