我有一个复杂的功能,所以我不发布它,但在这个功能,我想运行一个循环。每次运行的结果应保存在向量条目中。此外,我想在此循环中拥有和if else语句。当我运行循环时,我得到向量vr,但我只有Null条目exept最后一个条目。如何调整循环以使循环的每个结果都保存在向量中而不仅仅是最后一个?
for (i in length(y)) {
if( y[i] == 0) {
vr[i] <- fittedValuesFullModell[i] - y[i]
} else {
vr[i] <- sign(y[i] - fittedValuesFullModell[i]) *
sqrt(2 *(y[i] * log(y[i] / fittedValuesFullModell[i]) -
(y[i] - fittedValuesFullModell[i])))
}
考虑vapply
或sapply
设计迭代一系列并将输出直接保存到数据结构(即向量,矩阵,数组),而不是初始化空的和填充循环:
vr <- vapply(seq_along(y), function(i) {
if( y[i] == 0) {
fittedValuesFullModell[i] - y[i]
} else {
sign(y[i] - fittedValuesFullModell[i]) *
sqrt(2 *(y[i] * log(y[i] / fittedValuesFullModell[i]) -
(y[i] - fittedValuesFullModell[i])))
}
}, numeric(length(y)))
事实上,仔细观察,你可能能够运行mapply
,因为如果将单个值传递给方法,则通过y迭代元素并使用ifelse()
的fittingValuesFullModell对象。
vr <- mapply(function(i, j)
ifelse(i == 0, f - i, sign(i - f) * sqrt(2 *(i * log(i / f) - (i - f)))),
y, fittedValuesFullModell)