我有一个名为primes
的长度为100的向量,其中包含前一百个素数,如下所示:
primes
[1] 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109
[30] 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271
[59] 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449
[88] 457 461 463 467 479 487 491 499 503 509 521 523 541
我还有一个名为optm
的数据框,所有这些素数作为变量,学习率越来越低。这是我通过绘制第37个素数得到的例子:
plot.default(optm$step, optm$seed37, type = "l", ylab = "learning rate",
xlab = "first third iterations", main = 'seed37')
我想在4 * 5多帧上提取并保存所有这一百个图。因此,我想要5个文件(= 100个图表),这就是为什么我在以下循环中将a
作为记录限制实现的原因:
a <- 20
par(mfrow = c(4, 5))
for(i in primes) {
cln <- paste0("seed",i)
plot.default(optm$step, optm[,cln], type = "l", ylab = "learning rate", xlab = "step first third", main = cln)
for(j in 1:length(primes)) {
if (j==a){
dev.copy(png, paste0(j,'optm.png'),width=8,height=6,units="in",res=100)
a = a + 20
dev.off()
}
}
}
问题是我的计算机上录制的文件是相似的,并且拥有完全相同的情节(第一个种子2)。我的错误在哪里?
编辑:
a = 0
par(mfrow = c(4, 5))
for(i in primes) { for(j in length(primes)) {cln <- paste0("seed",i)
plot.default(optm$step, optm[,cln], type = "l", ylab = "learning rate", xlab = "step first third", main = cln)
a = (a +1)
if(a==20) {
dev.copy(png, paste0(j,'optm.png'),width=8,height=6,units="in",res=100)
dev.off()
}
}
}
这个模式适用于前20个。所以我编码了这样的seq:
foo = seq(0, length(primes), by=20)
现在,我需要在foo
命令中调用if
的任何值而不是20。我该如何管理?
答案 0 :(得分:1)
你只需要1个循环:
a <- 20
par(mfrow = c(4, 5))
for(i in seq(length(primes))) {
cln <- paste0("seed",primes[i])
plot.default(optm$step, optm[,cln], type = "l", ylab = "learning rate", xlab = "step first third", main = cln)
if (i&&a == 0){
dev.copy(png, paste0(i,'optm.png'),width=8,height=6,units="in",res=100)
dev.off()
}
}
答案 1 :(得分:0)
很抱歉回答我自己的问题,但我找到了办法。不是最好的,但以下代码正在运行。
a = 0
b = 20
par(mfrow = c(4, 5))
for(i in primes) {cln <- paste0("seed",i)
plot.default(optm$step, optm[,cln], type = "l", ylab = "learning rate", xlab = "step first third", main = cln)
a = (a +1)
print(a)
if (a == b) {
dev.copy(png, paste0(a,'optm.png'),width=8,height=6,units="in",res=100)
b =(b +20)
dev.off() }
}
每次a
到达b
时,都会制作一个情节系列的记录。每次a
到达b
时,b
都会增加20.我对任何优化它的方法持开放态度,特别是删除a和b并调用类似这样的seq:< / p>
foo = seq(0, length(primes), by=20)