我有一个包含大约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)))
非常感谢!
答案 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
包来处理这类事情,因此我可以按照列名称(V1
和V2
)访问变量:
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