2014-02-25 4 views
0

У меня есть вектор чисел 1:17. Я случайно переназначение подмножества векторов в нем (в приведенном ниже примере, где 1:10 и 11:17 должны быть случайным заказана):Изменить порядок последовательных целых чисел в блоках с помощью R

x = c(1:10) 
x_s = sample(x, length(x), replace = FALSE) 
[1] 7 9 3 4 10 5 1 6 8 2 
y=c(11:17) 
> y_s = sample(y, length(y), replace = FALSE) 
[1] 17 16 13 12 14 15 11 
final=c(x_s,y_s) 
[1] 7 9 3 4 10 5 1 6 8 2 17 16 13 12 14 15 11 

В то время как я могу получить свой окончательный переупорядоченный вектор, есть более элегантный подход к этому коду? Я спрашиваю, потому что это всего лишь пример, и моя реальная проблема - это гораздо больший вектор, в котором есть много подвекторов, которые нуждаются в случайном переупорядочении. Код будет слишком много строк!

спасибо.

+1

Как определяются подмножества? – A5C1D2H2I1M1N2O1R2T1

+1

Для этого точного примера вы можете просто сделать unlist (lapply (list (1:10, 11:17), sample)) '. – A5C1D2H2I1M1N2O1R2T1

+0

Просто присваивание целых чисел 'x <- c (1:10)', вам не нужно использовать 'c()'. 'x <- 1: 10' - то же самое. –

ответ

1

так, используя предложение Ананды Mahto на вашем наборе последовательностей и с помощью lapply (дважды) и последующие (дважды), чтобы построить последовательности в виде списка:

unlist(
lapply(c(list(x= c(1,52),y= 2:51,z= 53:103) ,  
      lapply(seq(103, 675, by=26), seq, len=25)) , 
     sample) 
     ) 

Аргумент внешней lapply выглядит следующим образом:

List of 26 
$ x: num [1:2] 1 52 
$ y: int [1:50] 2 3 4 5 6 7 8 9 10 11 ... 
$ z: int [1:51] 53 54 55 56 57 58 59 60 61 62 ... 
$ : num [1:25] 103 104 105 106 107 108 109 110 111 112 ... 
$ : num [1:25] 129 130 131 132 133 134 135 136 137 138 ... 
$ : num [1:25] 155 156 157 158 159 160 161 162 163 164 ... 
$ : num [1:25] 181 182 183 184 185 186 187 188 189 190 ... 
$ : num [1:25] 207 208 209 210 211 212 213 214 215 216 ... 
$ : num [1:25] 233 234 235 236 237 238 239 240 241 242 ... 
$ : num [1:25] 259 260 261 262 263 264 265 266 267 268 ... 
$ : num [1:25] 285 286 287 288 289 290 291 292 293 294 ... 
$ : num [1:25] 311 312 313 314 315 316 317 318 319 320 ... 
$ : num [1:25] 337 338 339 340 341 342 343 344 345 346 ... 
$ : num [1:25] 363 364 365 366 367 368 369 370 371 372 ... 
$ : num [1:25] 389 390 391 392 393 394 395 396 397 398 ... 
$ : num [1:25] 415 416 417 418 419 420 421 422 423 424 ... 
$ : num [1:25] 441 442 443 444 445 446 447 448 449 450 ... 
$ : num [1:25] 467 468 469 470 471 472 473 474 475 476 ... 
$ : num [1:25] 493 494 495 496 497 498 499 500 501 502 ... 
$ : num [1:25] 519 520 521 522 523 524 525 526 527 528 ... 
$ : num [1:25] 545 546 547 548 549 550 551 552 553 554 ... 
$ : num [1:25] 571 572 573 574 575 576 577 578 579 580 ... 
$ : num [1:25] 597 598 599 600 601 602 603 604 605 606 ... 
$ : num [1:25] 623 624 625 626 627 628 629 630 631 632 ... 
$ : num [1:25] 649 650 651 652 653 654 655 656 657 658 ... 
$ : num [1:25] 675 676 677 678 679 680 681 682 683 684 ... 
Смежные вопросы