矢量& Ifelse Logic - 不会填充向量

时间:2018-03-03 03:39:18

标签: r if-statement vector logic conditional

我正在创建一个带两个输入的函数:delta和length。该函数修改了一个现有的向量 - 让我们调用这个向量基 - 用delta作为长度'指定的元素。

我需要创建一个新的向量,让我们调用它来调整'。调整后的这个向量需要根据一个条件进行填充:如果基向量的索引值小于函数输入中指定的长度参数,那么我想为所有小于长度的元素增加基矢量增量。基本向量中大于指定长度参数的所有元素将保持与基本向量中的相同。

以下是我的代码示例:我试图以两种方式实现逻辑。 1.使用ifelse因为它允许矢量化输出。 2.使用if else逻辑。

    adjusted <- vector() #initialize the vector.

#Create a function. 
Adjustment <- function(delta, length) {

  ifelse((index < length), (adjusted <- base + delta), (adjusted <- base)) 

  head(adjusted)
}

    #Method 2. 
   Adjustment <- function(delta, length) {

      if (index < length) {
            adjusted <- base + delta
        }
      else {adjusted <- base}

      head(adjusted)
    }

我遇到麻烦的地方是我新创建的矢量,调整后,不会填充。我不太确定发生了什么 - 我对R很新,任何见解都会非常感激。

编辑:给出了一些建议,我能够返回输出。唯一的问题是调整后的问题。 vector现在是索引向量长度的2倍。我发现这种情况正在发生,因为有两个计算,一个在if值为true,另一个在if值为false。但是,我希望函数写入仅在索引小于参数长度的元素中调整的向量。

例如。让我们说索引向量是10.如果我将长度设置为3,我想调整以反映元素1:3的变化以及4:10的基础相同信息。

我的代码反映调整后现在是长度20.我如何处理这个并保持向量的原始值?

adjusted <- c()

Adjustment <- function(delta, length) {
ifelse(index < length, adjusted <<- c(adjusted, base + delta), adjusted <<- c(adjusted, base))

  head(adjusted)
}

1 个答案:

答案 0 :(得分:0)

Adjustment <- function(delta, length) {

if (index < length) {
for(i in 1:length-1){
  adjusted[i] <- base[i] + delta
}
}
else {adjusted <- base}

head(adjusted)

}


index=2
length=5
base <- c(1,2,3,4,5,6,7,8,9,10)
delta = 2

Adjustment(delta,length)

这将返回一个包含所有值&lt;从delta添加的基础向量的indexVALUE。