'R Programming: Run a forloop where I takes on specific values

I am attempting to create a loop that runs a function with specific values of i in a vector:

For example I would like to save i + 2 for when i is 1 and 5

test<- c()
for(i in c(1,5)){
  
  test[i] <- i + 2
  
}

This ends up printing NA for 2 ,3 and 4: [1] 3 NA NA NA 7

while the result I would like is: [1] 3 7

This is probably very elementary but I cannot seem to figure this out.

r


Solution 1:[1]

R is vectorized, means you can do this:

c(1, 5) + 2
# [1] 3 7

for loops in R are often very slow, which is why they are implemented in C in functions of the *apply family, e.g.

sapply(c(1, 5), \(i) i + 2)
# [1] 3 7

If you really need to rely on a for loop, If you really need to rely on a "for" loop, you may want to loop over the indices rather than the values (a quite common mistake!):

v <- c(1, 5)
test <- vector('numeric', length(v))
for (i in seq_along(v)) {
  test[i] <- v[i] + 2
}
test
# [1] 3 7

Solution 2:[2]

Use append

test<- c()
for(i in c(1,5)){
  test<-append(test,i+2)
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Bensstats