1

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

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

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

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

> 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)))

非常感谢!

4

1 回答 1

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
于 2012-08-19T18:30:21.970 回答