【发布时间】:2020-12-04 20:30:33
【问题描述】:
我有以下带有变量的函数:
b <- 1 ; d_uhpc <- 4
L_joint <- 8 ; A_bar <- 0.31
A_s <- (A_bar/L_joint)*12
L_unb <- 16 ; f_t <- 1.2
E_s <- 29000 ; E_uhpc <- 8000
ec <- function(x){
theta <- x[3]
eci <- seq(10^-3,1,10^-3)
while (TRUE) {
fc <- eci * E_uhpc
c <- (sqrt(A_s^2 * E_s^2 * eci^2 + fc * A_s * E_s * b * d_uhpc *eci + b^2 * f_t^2 * d_uhpc^2) +
b * f_t * d_uhpc - A_s * E_s *eci)/(b * fc + 2 * b * f_t)
ec <- (-2*theta*c)/L_unb
if (eci > abs(ec)) return("Error") else return(ec)
}
}
# sample rows
strain.analysis <- read.table(text="
L S theta
1 60 6 0.3876484
2 70 6 0.3650651
3 80 6 0.3619457
4 90 6 0.3089947
5 100 6 0.3131211
6 110 6 0.3479024", header=TRUE)
strain.analysis1 <- cbind(strain.analysis, vars = t(apply(strain.analysis,1,ec)))
该函数没有正确理解条件,只为所有eci 值返回ec,而不管它应该只在eci < abs(ec) 时返回ec 的条件
以下是我尝试在 R 中重新创建的示例。
【问题讨论】:
-
感谢您提供数据,但是您的
A_bar值未定义,因此我们无法初始化c。此外,使用c作为变量是一个坏主意,因为c是一个非常重要的基本 R 原始函数。 -
@Croote 非常感谢,我刚刚在原帖中添加了
A_bar <- 0.31。您是否建议我删除c并为ec写一个更长的等式。此分析的最终目标是获取c值并根据它检查限制。附言我也对原始数据进行了另一次编辑。在函数中,我将分配的列更新为theta <- x[3] -
谢谢@Cole。我将在下一次编辑中使增量更小!原来要求的增量有9999多哈哈!我以为我写的够短:')
-
ec 和 eci 是大小为 1000 的向量,你说的 eci
-
为什么设置
eci <- seq(10^-3, 1, 10^-3)?从您的流程图中,eci应该是单个值,而不是向量。
标签: r function dataframe conditional-statements break