R - 使用行中的数据在每一行上应用函数

时间:2011-04-07 18:34:35

标签: r

有更快的方法吗:

for (i in 1:nrow(dataframe))
{
dataframe$results <- with(dataframe, myownfunction(column1[i],
  column2[i], column3[i], column4[i], column5[i], column6[i])
}

myownfunction使用uniroot()找到隐含波动率,但当uniroot找不到解决方案时,它会停止(通常是因为数据中存在某些错误),并且循环停止。如果函数从NA收到错误并继续下一行,是否有办法让函数输出uniroot

问候。

3 个答案:

答案 0 :(得分:2)

第1部分:你很可能成功:

ave( dataframe[, c("column1", column2", column3", "column4", "column5", "column6")], myownfunction)

第2部分:如果您修改了函数以使用try测试失败并在失败时返回NA,则可以正确填写结果中缺少的数据。

答案 1 :(得分:0)

你好像有问题:

1)如果发生故障,则返回一个值。已经发布,请查看plyr包中的 failwith 。它就是这样做的。

2)加速for循环。您是否尝试过使用 mapply ?它是一个多变量应用,它将函数同时应用于每个参数的每个元素。所以

mapply(myfunc, column1, column2, column3, column4)

(以及修改myfunc以使用failwith)会做你想要的那种事情。

如果你愿意的话,mapply的plyr版本是mdply。

答案 2 :(得分:-1)

从另一个论坛得到这个,我比以前的选择更喜欢它:

R> M <- matrix(1:6, nrow=3, byrow=TRUE)

R> M

         [,1] [,2]
    [1,]    1    2

    [2,]    3    4

    [3,]    5    6
    R> apply(M, 1, function(x) 2*x[1]+x[2])

    [1]  4 10 16