我有一個嵌套回圈:
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,如果輸出確實SR_value以給定的準確度 ( 0.0002)匹配,則在 中列印SR_value和相應的值SA_range。
回圈作業正常,但我的問題是存盤結果(目前我只能列印它們)。挑戰是我的實際SR_value值比這個例子多得多,有時SA_range回圈可以找到多個值。例如,當 SR = 0.182 時,只有一個 SA 值與公式輸出匹配,但是當 SR = 0.998 時,有 63 個 SA 值與輸出匹配!(此處未顯示代碼以節省空間)
所以基本上,假設這個回圈的結果長度未知,我如何存盤所有結果?
(這是一個通過迭代求解方程的情況,所以也歡迎任何其他有效的方法!)
uj5u.com熱心網友回復:
你可以試試 -
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
#...
uj5u.com熱心網友回復:
您的用例的解決方案:
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
回傳:
$`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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/341294.html
下一篇:替換資料框中的整個字串
