R перебирать файлы и записывать результаты - PullRequest
1 голос
/ 06 марта 2019

Я делаю свою первую попытку в 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 

Что я делаю неправильно

1 Ответ

2 голосов
/ 06 марта 2019

sink переводит консольный вывод в файл, поэтому данные должны быть выведены с помощью R, чтобы появиться в файле.Я думаю, что отсутствует то, что в цикле вам нужно явно print вывод summary, чтобы он появился в консоли (и, таким образом, был записан приемником).

Сравните консольвывод этих двух циклов:

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

Печать результатов на консоль

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

Не печать на консоль

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...