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 № 1Brzmi, 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 t
najpierw 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))