我现在的任务是解决像eqn(a,b,c)
这样的等式,其中a,b,c各自是数据的列。如何将这些列传递给uniroot
来解决相同的根?我想也许sapply
在这里很有用。
正如alistaire建议的那样,我按照以下方式粘贴详细信息:
等式如下:
eqnt <- function(T,l,fn,m,EI) { T - fn^2*m/l^2 - EI }
现在参数都是(l,fn,m,EI)加载到数据帧中,比如df
。我打算用df
中的参数求解所有方程。
L m EI fn
1 10 6.190004 9988.997 6.59710
2 10 6.190004 9988.997 8.01847
3 10 6.190004 9988.997 9.21858
4 15 6.190004 9988.997 10.27676
5 15 6.190004 9988.997 11.23391
6 15 6.190004 9988.997 12.11441
我怎么样?
当我尝试按照代码,定义一个函数并使用mapply
:
rootfun <- function(l,fn,m,EI){
uniroot.all(eqnt,l,fn,m,EI,lower=0.8e5, upper=3.5e5,
interval=c(0.8e5,3.8e5))
}
res <- mapply(rootfun,l=data$L,fn=data$f.4,m=data$m,EI=data$EI)
出现错误:
Error in f(xseq, ...) (from #8) : argument "mm" is missing, with no default
答案 0 :(得分:1)
您可以使用pmap,但没有一些数据可以解决您难以回答的问题。例如见:
library(purrr)
df <- data.frame(
x = c("apple", "banana", "cherry"),
pattern = c("p", "n", "h"),
replacement = c("x", "f", "q"),
stringsAsFactors = FALSE
)
pmap(df, gsub)
说明 - 将您需要的数据命名为与函数输入一致的循环(在本例中为uniroot
)。将数据框与函数一起传递给pmap。