如何将多列作为参数传递给uniroot

时间:2018-03-21 04:18:44

标签: r sapply

我现在的任务是解决像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

1 个答案:

答案 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。