将循环的每个结果保存为向量中的条目

时间:2018-03-04 14:40:04

标签: r loops for-loop regression

我有一个复杂的功能,所以我不在这里发布,但在这个功能中,我想运行一个循环。每次运行的结果应保存在向量条目中。此外,我想在此循环中拥有和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]))) 
    }

1 个答案:

答案 0 :(得分:0)

考虑vapplysapply设计迭代一系列并将输出直接保存到数据结构(即向量,矩阵,数组)中,而不是初始化空的并填充循环:

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,因为您使用ifelse()通过 y fitsValuesFullModell 对象进行元素迭代如果将单个值传递给方法。

vr <- mapply(function(i, j) 
               ifelse(i == 0, f - i, sign(i - f) * sqrt(2 *(i * log(i / f) - (i - f)))),
             y, fittedValuesFullModell)