Я относительно новичок в R, и я наткнулся на код, который используется для замены NA новыми значениями не-NA, которые я не до конца понимаю, пожалуйста, кто-нибудь может мне это объяснить?:
Это код:
z <- !is.na(a)
z <- z | !cumsum(z)
y <- a[z][cumsum(z)]
У меня есть вектор "a", который содержит числа и NA:
a<-c(1,NA,NA,NA,3,4,5,NA,5,5,5,NA,NA,NA)
, запустив первую строку, я получаю "z", котораяявляются логическими значениями вектора "a":
> z
[1] TRUE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE
, поэтому теперь я знаю, что если я хочу получить доступ к первому элементу вектора, я могу просто использовать символ "[" для подстановки числа 1:
> a[1]
[1] 1
аналогично, если мне нужны первые 3 элемента:
> a[1:3]
[1] 1 NA NA
Почему при вводе следующего значения происходит подстановка значений ИСТИНА?Разве не предполагается возвращать снова весь вектор, включая АН?потому что z является вектором всех логических значений ...
> a[z]
[1] 1 3 4 5 5 5 5
Подмножество FALSE, по-видимому, равно
> a[!z]
[1] NA NA NA NA NA NA NA
Наконец, я могу понять накопительную функцию "cumsum":
> cumsum(z)
[1] 1 1 1 1 2 3 4 4 5 6 7 7 7 7
но я не понимаю, почему, набрав:
> a[z][cumsum(z)]
, он возвращает:
[1] 1 1 1 1 3 4 5 5 5 5 5 5 5 5
Что означает «[] []»?Я знаю, что, например, набрав
> a[z][1]
, я могу получить доступ к первому элементу логических значений TRUE
[1] 1
, но не получаю третью строку кода.