У меня есть следующий простой вектор:
a = c(1,0,0,1,0,0,0,0)
и я хотел бы получить вектор (b) такой, что для каждого показателя x в a, если a[x] равен 1, мы оставляем его как есть, а если он равен 0, мы вычисляем a[x-1] + 1, до следующего 1:
b = c(1,2,3,1,2,3,4,5)
Я попытался использовать карту():
map(
.x = seq(1,(length(a))),
.f = function(x) {
a[x] = ifelse(a[x]==1, a[x], a[x-1]+1)
a})
Очевидно, это не работает, потому что карта не обновляет вектор a. Как я могу сделать это, используя карту(). Возможно ли вообще обновить что-то вне map()?
Решение проблемы
Если вы просто измените его, чтобы использовать оператор суперприсваивания <<-
, то, как вы пытались, действительно работает.
a = c(1,0,0,1,0,0,0,0)
map(
.x = seq(1,(length(a))),
.f = function(x) {
a[x] <<- ifelse(a[x]==1, a[x], a[x-1]+1)
a})
a
#> [1] 1 2 3 1 2 3 4 5
Комментариев нет:
Отправить комментарий