所以我试图用uniroot()查找Y的特定值的根。我将它们全部放在数据帧的一列中,我想创建一个新列,并通过lapply()为原始列的每个Y查找根。 我创建uniroot作为自变量以查找其根的函数的方式是,将Y值减去该函数的最后一个系数,然后将该Y值作为附加参数传递给uniroot(根据uniroot帮助页面)。
几个小时后,我试图弄清正在发生的事情,我意识到lapply()传递给函数的值是Y,但是它被读为uniroot内部的“ interval”参数,因此给我带来了错误论点。
我想我可以用另一种方法来实现,但是如果这种方法有解决方案,那会更好,更简单。
pol_mod <- lm(abs_p ~ poly(patron, 5, raw = TRUE), data = bradford)
a <- as.numeric(coefficients(pol_mod)[6])
b <- as.numeric(coefficients(pol_mod)[5])
c <- as.numeric(coefficients(pol_mod)[4])
d <- as.numeric(coefficients(pol_mod)[3])
e <- as.numeric(coefficients(pol_mod)[2])
f <- as.numeric(coefficients(pol_mod)[1])
fs <- function (x,y) {a*x^5 + b*x^4 + c*x^3 + d*x^2 + e*x + f - y}
interpol <- function (y, fs) {
return(uniroot(fs,y=y, interval=c(0,2000)))
}
bradford$concentracion <- lapply(bradford$abs_m, interpol, fs=fs)
我得到的错误:
Error in uniroot(fs, y = y, interval = c(0, 2000)) :
f.lower = f(lower) is NA
不用说,在lapply()之外应用时一切正常
如果有人可以伸出援手,我会非常高兴!预先感谢!
编辑:这是数据框的外观。
bradford
# A tibble: 9 x 3
patron abs_p abs_m
<dbl> <dbl> <dbl>
1 0 0 1.57
2 25 0.041 1.27
3 125 0.215 1.59
4 250 0.405 1.61
5 500 0.675 0.447
6 750 0.97 0.441
7 1000 1.23 NA
8 1500 1.71 NA
9 2000 2.04 NA