有更快的方法吗:
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
?
问候。
答案 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