/ / Powtarzanie sekwencji w R - r, pętle, sekwencja

Powtarzanie sekwencji w R - r, pętle, sekwencja

Chcę wygenerować wektor liczb (1:5), (1:5)+45 i tak dalej

    nums <- seq(1,22500,45)
rws <- c(1:5)
nums2 <- nums - 1
for (i in nums2[2:500]){
rwsx <- append(rws, rws+i)
rwsx}

Ale pętla po prostu przechowuje najnowszy dodatek i otrzymuję:

1     2     3     4     5 22456 22457 22458 22459 22460

Odpowiedzi:

5 dla odpowiedzi № 1

Brzmi, jakbyś szukał outer. Próbować:

> nums <- seq(1, 22500, 45)
> out <- outer(nums, 0:4, "+")
> head(out)
[,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]   46   47   48   49   50
[3,]   91   92   93   94   95
[4,]  136  137  138  139  140
[5,]  181  182  183  184  185
[6,]  226  227  228  229  230
> tail(out)
[,1]  [,2]  [,3]  [,4]  [,5]
[495,] 22231 22232 22233 22234 22235
[496,] 22276 22277 22278 22279 22280
[497,] 22321 22322 22323 22324 22325
[498,] 22366 22367 22368 22369 22370
[499,] 22411 22412 22413 22414 22415
[500,] 22456 22457 22458 22459 22460

Jak wspomniano w komentarzach, a matrix to wektor z atrybutami wymiarowymi. Macierze w R są generalnie zbudowane według kolumny, więc jeśli chcesz usunąć wymiary i uzyskać pojedynczy wektor w kolejności wierszowej, to musisz tnajpierw rozpakuj macierz.

> head(as.vector(t(out)), 16)
[1]   1   2   3   4   5  46  47  48  49  50  91  92  93  94  95 136

2 dla odpowiedzi nr 2

Możemy spróbować

rwsx <- matrix(nums,500) %*% matrix(rws,1)

head(rwsx)

[,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]   46   92  138  184  230
[3,]   91  182  273  364  455
[4,]  136  272  408  544  680
[5,]  181  362  543  724  905
[6,]  226  452  678  904 1130

1 dla odpowiedzi nr 3
r <- 22500%/%45
m <- matrix(45*0:(r-1), r, 5)
m <- m+ col(m)
rwsx <- c(t(m))

lub

r <- 22500%/%45
m <- matrix(45*0:(r-1), 5, r, byrow=TRUE)
m <- m+ row(m)
rwsx <- c(m)

1 dla odpowiedzi nr 4

Jako oneliner:

as.vector(sapply(seq(by = 45, length.out = 10), function(x) x + 0:4))