r - 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
我究竟做错了什么?
解决方案
sink
将控制台输出转移到文件中,因此数据需要通过 R 输出才能出现在文件中。我认为缺少的是,在一个循环中,您需要显式地print
输出summary
以使其出现在控制台中(因此由接收器编写)。
比较这两个循环的控制台输出:
for (i in 1:5) {
print(summary(cars))
}
将结果打印到控制台
for (i in 1:5) {
summary(cars)
}
不打印到控制台
推荐阅读
- php - 在php中循环时将数组推送到数据
- java - 为什么我的代码使用'=='而不是'.equals'来执行'IF'和'ELSE'?
- java - @Pattern 注释用作 spring mvc 中 bean 验证的一部分,重复抛出相同的错误
- reactjs - 隐藏所有 div 并在单击多个按钮时显示一个 div
- sql - 如果开始日是一个月中的“星期一”SQL,如何从日期中提取“周数”和“日数”
- python - 解决“IFs地狱”的最佳方法是什么?
- bash - 如何在终端命令文件中引用当前目录?
- php - 为什么设置日志文件路径的 PHP 调用会失败?
- eclipse-scout - 使用基于参数的连接服务
- linux - 在Linux内核TCP实现中,为什么“sk_acceptq_is_full”使用'>'而不是'>='?