/ / Збереження довжини маски при піднаборі в R - r, векторі, масці

Зберегти довжину маски при підмноженні в R - r, вектор, маска

Чому в R маскування не фіксує довжину?

> v=c(1,2,3,4,5)
> mask=c(T,T,T,T)
> v[mask]
[1] 1 2 3 4 5

Замість

> v[mask]
[1] 1 2 3 4

Як це зробити?

Відповіді:

3 для відповіді № 1

Це пов'язано з переробкою. Якщо вектори мають різну довжину, то коротший вектор рециркулюється в тому порядку, в якому він вказаний.

Порівняйте наступне:

> mask=c(F)
> v[mask]
numeric(0)

> mask=c(T)
> v[mask]
[1] 1 2 3 4 5

> mask=c(T, F, T, F)
> v[mask]
[1] 1 3 5

У першому прикладі F переробляється 5 разів, тому ніякі значення не друкуються - у другому прикладі відбувається протилежне.

У третьому прикладі 2 і 4 опущені, оскільки вони проіндексовані F, але маску переробляють, щоб дати a T для елемента 5

Редагувати Бажаним результатом є 1, 2, 3, 4? Спробуйте маску <- c (T, T, T, T, F)

Це те, що дозволяє заяву подібне

v[v != 5]

Тому що це порівняння переробляється по всьому вектору