使用来自不同数据帧的值作为嵌套函数的输入

时间:2015-08-23 13:17:05

标签: r function wrapper

如何使用来自数据框ftn4的函数I的输出运行以下代码,newtonraphson函数将其与数据框中的值结合使用R0。我想将输出存储在与RI相同维度(ncol = 5,nrow = 5)的新数据框(R0)中。

我卡住了,有什么想法吗?任何提示都非常赞赏

c           = c(0.3)      
Ccf         = c(0.3)      
Acf         = c(3*10^-6)  
E           = c(0.00006) 
Ke          = c(1000)    

I           = as.data.frame(matrix(sample(seq(150,300,0.1),25), ncol = 5, nrow = 5))
R0          = as.data.frame(matrix(sample(seq(0.01,0.2,0.001),25), ncol = 5, nrow = 5))

library(spuRs) 

ftn4 <- function(x) {
  f = { x^2*exp(c*x)- (Ccf*Acf*E*(I/Ke+I))}
  f1 = { 2 * x * exp(c * x) + x^2 * (exp(c * x) * c)}
        return(c(f,f1))
}

R = as.data.frame(newtonraphson(ftn4, R0, tol = 1e-09 ,max.iter = 1000))

1 个答案:

答案 0 :(得分:0)

根据注释的指定,您应该将参数传递给函数ftn4,该函数会产生一个值。所以ftn4应该改为:

ftn4 <- function(x,I) {
  f = { x^2*exp(c*x)- (Ccf*Acf*E*(I/Ke+I))}
  f1 = { 2 * x * exp(c * x) + x^2 * (exp(c * x) * c)}
  return(c(f,f1))
}

现在迭代你的矩阵I和R0。

R <- data.frame(matrix(NA,nrow=nrow(I), ncol(I)))
for(i in 1:nrow(I)){
  for(j in 1:ncol(I)){
    R[i,j] <- newtonraphson(ftn  = function(x) ftn4(x, I[i,j]), 
                            x0  = R0[i,j], 
                            tol = 1e-09, 
                            max.iter = 1000)
  }
}