R为每一行查找函数的根

时间:2012-08-19 18:17:14

标签: r

我有一个包含大约400个观察值(行)的数据集。对于每一行,我需要找到函数的根,例如:f(x)= variable_1 - variable_2 + x。

为了找到root,我想使用rootSolve包中的函数uniroot.all(f,interval)

我的问题是,我如何为每一行做这件事。我应该使用循环还是“应用”更适合这样做?

使用“apply”我尝试了以下代码,但是我总是收到错误消息。

> library(rootSolve)
> df<-as.data.frame(matrix(1:6,ncol=2))
> df
  V1 V2
1  1  4
2  2  5
3  3  6

> apply(df,1,uniroot.all(fun<- function(x) df$V1-df$V2 + x, interval=c(0,100)))

非常感谢!

1 个答案:

答案 0 :(得分:1)

使用apply

时,这是正确的语法
apply(df, 1,
      function(z) uniroot.all(function(x)z[1]-z[2]+x,
                              interval = c(0,100)))
# [1] 3 3 3

就个人而言,我喜欢使用plyr包来处理这类事情,因此我可以按照列名称(V1V2)访问变量:

library(plyr)
adply(df, 1, summarize,
      solution = uniroot.all(function(x)V1-V2+x,
                             interval = c(0,100)))
#   V1 V2 solution
# 1  1  4        3
# 2  2  5        3
# 3  3  6        3