存储嵌套循环的未知长度结果
Store unknown length results of a nested loop
我有一个嵌套循环:
SA_range <- seq(0.01, 89.99, by = 0.01)
SR_value <- c(0.182, 0.307, 0.408, 0.603, 0.720, 0.823, 0.998)
library(tidyverse)
library(pracma)
for (i in SR_value) {
for (j in SA_range) {
if (near((cot(j*(pi/180))*log(tan(j*(pi/180)) + sec(j*(pi/180)))), # my formula
i,
tol = 0.0002)) {
print(c(i, j))
}
}
}
我在这里尝试做的是将 SA_range
中的每个数字代入公式,以查看公式输出是否与 SR_value
中的值匹配,以及输出是否匹配 [=12] =] 以给定的精度 (0.0002
),然后在 SA_range
.
中打印 SR_value
和相应的值
循环工作正常,但我的问题是存储结果(目前我只能打印它们)。挑战是我的实际 SR_value
比这个例子有更多的值,有时 SA_range
中的多个值可以通过循环找到。例如当SR = 0.182时,只有一个SA值匹配公式输出,但是当SR = 0.998时,有63个SA值匹配输出! (此处未显示代码以保存space)
所以基本上,假设这个循环的结果长度是未知的,我怎样才能存储所有的结果?
(这是一个迭代求解方程的案例,欢迎使用其他有效的方法!)
针对您的用例的解决方案:
results <- list()
for (i in SR_value) {
SAresults <- numeric()
for (j in SA_range) {
if (near((cot(j*(pi/180))*log(tan(j*(pi/180)) + sec(j*(pi/180)))), # my formula
i,
tol = 0.0002)) {
SAresults <- c(SAresults, j)
}
results[[as.character(i)]] <- SAresults
}
}
建议解决方案的最小可重现示例:
SA_range <- seq(0.01, 89.99, by = 0.01)
SR_value <- c(0.182, 0.307, 0.408, 0.603, 0.720, 0.823, 0.998)
results <- list()
for (i in SR_value) {
SAresults <- numeric()
for (j in SA_range) {
if (j < 0.03) {
SAresults <- c(SAresults, j)
}
results[[as.character(i)]] <- SAresults
}
}
results
Returns:
$`0.182`
[1] 0.01 0.02
$`0.307`
[1] 0.01 0.02
$`0.408`
[1] 0.01 0.02
$`0.603`
[1] 0.01 0.02
$`0.72`
[1] 0.01 0.02
$`0.823`
[1] 0.01 0.02
$`0.998`
[1] 0.01 0.02
你可以试试-
SA_range <- seq(0.01, 89.99, by = 0.01)
SR_value <- c(0.182, 0.307, 0.408, 0.603, 0.720, 0.823, 0.998)
library(tidyverse)
library(pracma)
results <- list()
k <- 0
for (i in SR_value) {
for (j in SA_range) {
value <- (cot(j*(pi/180))*log(tan(j*(pi/180)) + sec(j*(pi/180))))
if (near(value, i, tol = 0.0002)) {
k <- k + 1
results[[k]] <- c(i, j)
}
}
}
results
#[[1]]
#[1] 0.182 87.190
#[[2]]
#[1] 0.307 84.080
#[[3]]
#[1] 0.307 84.090
#[[4]]
#[1] 0.408 80.800
#[[5]]
#[1] 0.408 80.810
#...
我有一个嵌套循环:
SA_range <- seq(0.01, 89.99, by = 0.01)
SR_value <- c(0.182, 0.307, 0.408, 0.603, 0.720, 0.823, 0.998)
library(tidyverse)
library(pracma)
for (i in SR_value) {
for (j in SA_range) {
if (near((cot(j*(pi/180))*log(tan(j*(pi/180)) + sec(j*(pi/180)))), # my formula
i,
tol = 0.0002)) {
print(c(i, j))
}
}
}
我在这里尝试做的是将 SA_range
中的每个数字代入公式,以查看公式输出是否与 SR_value
中的值匹配,以及输出是否匹配 [=12] =] 以给定的精度 (0.0002
),然后在 SA_range
.
SR_value
和相应的值
循环工作正常,但我的问题是存储结果(目前我只能打印它们)。挑战是我的实际 SR_value
比这个例子有更多的值,有时 SA_range
中的多个值可以通过循环找到。例如当SR = 0.182时,只有一个SA值匹配公式输出,但是当SR = 0.998时,有63个SA值匹配输出! (此处未显示代码以保存space)
所以基本上,假设这个循环的结果长度是未知的,我怎样才能存储所有的结果?
(这是一个迭代求解方程的案例,欢迎使用其他有效的方法!)
针对您的用例的解决方案:
results <- list()
for (i in SR_value) {
SAresults <- numeric()
for (j in SA_range) {
if (near((cot(j*(pi/180))*log(tan(j*(pi/180)) + sec(j*(pi/180)))), # my formula
i,
tol = 0.0002)) {
SAresults <- c(SAresults, j)
}
results[[as.character(i)]] <- SAresults
}
}
建议解决方案的最小可重现示例:
SA_range <- seq(0.01, 89.99, by = 0.01)
SR_value <- c(0.182, 0.307, 0.408, 0.603, 0.720, 0.823, 0.998)
results <- list()
for (i in SR_value) {
SAresults <- numeric()
for (j in SA_range) {
if (j < 0.03) {
SAresults <- c(SAresults, j)
}
results[[as.character(i)]] <- SAresults
}
}
results
Returns:
$`0.182`
[1] 0.01 0.02
$`0.307`
[1] 0.01 0.02
$`0.408`
[1] 0.01 0.02
$`0.603`
[1] 0.01 0.02
$`0.72`
[1] 0.01 0.02
$`0.823`
[1] 0.01 0.02
$`0.998`
[1] 0.01 0.02
你可以试试-
SA_range <- seq(0.01, 89.99, by = 0.01)
SR_value <- c(0.182, 0.307, 0.408, 0.603, 0.720, 0.823, 0.998)
library(tidyverse)
library(pracma)
results <- list()
k <- 0
for (i in SR_value) {
for (j in SA_range) {
value <- (cot(j*(pi/180))*log(tan(j*(pi/180)) + sec(j*(pi/180))))
if (near(value, i, tol = 0.0002)) {
k <- k + 1
results[[k]] <- c(i, j)
}
}
}
results
#[[1]]
#[1] 0.182 87.190
#[[2]]
#[1] 0.307 84.080
#[[3]]
#[1] 0.307 84.090
#[[4]]
#[1] 0.408 80.800
#[[5]]
#[1] 0.408 80.810
#...