Почему удаление каких (ЛОЖНЫХ) столбцов удаляет все столбцы? - PullRequest
1 голос
/ 30 апреля 2020

Этот ответ предупреждает о каком-то страшном поведении which. В частности, если вы возьмете какой-либо фрейм данных, скажем, df <- data.frame(x=1:5, y=2:6), а затем попытаетесь установить для него значение, равное which(FALSE) (то есть integer(0)), то вы удалите каждый столбец в наборе данных. Почему это? Зачем удалять все столбцы, которые соответствуют integer(0)? Удаление ничего не должно разрушать все.

Пример:

>df <- data.frame(x=1:5, y=2:6)
>df
  x y
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6
>df <- df[,-which(FALSE)]
>df
data frame with 0 columns and 5 rows

1 Ответ

2 голосов
/ 30 апреля 2020

Рассмотрим:

identical(integer(0), -integer(0))
# [1] TRUE

Итак, на самом деле вы выбираете ничего, а не удаляете ничего.

Если вы хотите удалить ничего, вы можете использовать большое отрицательное целое число, например, максимально возможное.

df[, -.Machine$integer.max]
#   x y
# 1 1 2
# 2 2 3
# 3 3 4
# 4 4 5
# 5 5 6
...