GOOGLE ADS

пятница, 6 мая 2022 г.

Обновление вектора вне цикла в map() с помощью R

У меня есть следующий простой вектор:

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

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...