Blind9
Blind9

Reputation: 1

Add number to vector repeatdly and duplicate vector

I have a two value 3 and 5

and I make vector

num1 <- 3
num2 <- 12
a <- c(num1, num2)

I want add number(12) to vector "a" and also I want to make new vector with repeat and append

like this:

3,12, 15,24, 27,36, 39,48 ....

repeat number "n" is 6

I don't have any idea.

Upvotes: 0

Views: 89

Answers (3)

Sotos
Sotos

Reputation: 51592

Here is a somewhat generic function that takes as input your original vector a, the number to add 12, and n,

f1 <- function(vec, x, n){
  len1 <- length(vec)
  v1 <- sapply(seq(n/len1), function(i) x*i)
  v2 <- rep(v1, each = n/length(v1))
  v3 <- rep(vec, n/len1)
  return(c(vec, v3 + v2))
}

f1(a, 12, 6)
#[1]  3 12 15 24 27 36 39 48

f1(a, 11, 12)
#[1]  3 12 14 23 25 34 36 45 47 56 58 67 69 78

f1(a, 3, 2)
#[1]  3 12  6 15

EDIT

If by n=6 you mean 6 times the whole vector then,

f1 <- function(vec, x, n){
  len1 <- length(vec)
  v1 <- sapply(seq(n), function(i) x*i)
  v2 <- rep(v1, each = len1)
  v3 <- rep(vec, n)
  return(c(vec, v3 + v2))
}

f1(a, 12, 6)
#[1]  3 12 15 24 27 36 39 48 51 60 63 72 75 84

Upvotes: 1

Gregor Thomas
Gregor Thomas

Reputation: 146144

Using rep for repeating and cumsum for the addition:

n = 6
rep(a, n) + cumsum(rep(c(12, 0), n))
# [1] 15 24 27 36 39 48 51 60 63 72 75 84

Upvotes: 0

lmo
lmo

Reputation: 38520

Here are two methods in base R.

with outer, you could do

c(outer(c(3, 12), (12 * 0:4), "+"))
 [1]  3 12 15 24 27 36 39 48 51 60

or with sapply, you can explicitly loop through and calculate the pairs of sums.

c(sapply(0:4, function(i) c(3, 12) + (12 * i)))
 [1]  3 12 15 24 27 36 39 48 51 60

outer returns a matrix where every pair of elements of the two vectors have been added together. c is used to return a vector. sapply loops through 0:4 and then calculates the element-wise sum. It also returns a matrix in this instance, so c is used to return a vector.

Upvotes: 3

Related Questions