Замена элемента внутри вектора в списке - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть список векторов, который выглядит как

[[1]][1] 1 1 2

[[2]]
[1] 1 1 2

[[3]]
[1] 2 1 1

[[4]]
[1] 2 2 2

Я хотел бы заменить первый компонент каждого из векторов на 9.Я пробовал

out <- append(vecs2T2[[1]], y, after=0)

, но это просто добавляет 9 в начале и не заменяет его (см. Ниже).

[1] 9 1 1 2

Я хотел бы, чтобы эта запись читалась 912.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Другая идея заключается в использовании Map и объединении 9 с каждым вектором минус его первый элемент

Map(function(x, y)c(x, y[-1]), 9, l1)
0 голосов
/ 21 ноября 2018
lapply(ll, replace, 1, 9)

Это идет вектор за вектором, и replace s 1-й элемент с 9. (Аргументы замены: (данные, список индексов, список значений), с рециклированным списком значенийбыть равным списку индексов.)

replace() определяется как:

replace <- function (x, list, values) {
  x[list] <- values
  x
}

, поэтому вы также можете использовать этот метод.

lapply(ll, function(x) { x[1] <- 9 ; x })

Вы также можете использовать либо с purrr::map():

purrr::map(ll, ~{ .x[1] <- 9 ; .x })
purrr::map(ll, replace, 1, 9)

Сражение лицом к лицу (не лучшая настройка микробенчмарков в мире, хотя):

microbenchmark::microbenchmark(
  purr_repl = purrr::map(ll, replace, 1, 9),
  purr_op = purrr::map(ll, ~{ .x[1] <- 9 ; .x }),
  lapp_repl = lapply(ll, replace, 1, 9),
  lapp_op = lapply(ll, function(x) { x[1] <- 9 ; x }),
  Map = Map(function(x, y)c(x, y[-1]), 9, ll)
)
## Unit: microseconds
##       expr    min      lq      mean  median      uq      max neval
##  purr_repl 27.510 29.7555  49.98242 31.4735 33.4805 1506.400   100
##    purr_op 84.415 86.9550 125.07364 90.0665 98.9465 2423.406   100
##  lapp_repl  4.422  4.8350   5.94472  5.1965  5.5930   34.947   100
##    lapp_op  4.672  5.4250  19.14590  5.9045  6.5015 1215.477   100
##        Map 10.670 12.2490  28.94712 13.5935 14.7170 1238.311   100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...