Почему any () определяется только для цифры c, а не для логического data.frame? - PullRequest
3 голосов
/ 16 февраля 2020

Это выглядит довольно удивительно:

df1 <- data.frame(A=TRUE, B=FALSE)
df2 <- data.frame(A=1, B=2)

> any(df1)
Error in FUN(X[[i]], ...) :
  only defined on a data frame with all numeric variables

> any(df2)
[1] TRUE

Это не похоже на ошибку, потому что ошибка правильно гласит, что any() будет работать только в случае, когда все переменные в пределах data.frame являются цифрами c.

Но почему any() работает для всех числовых переменных c, а не тогда, когда все значения являются логическими?

1 Ответ

2 голосов
/ 16 февраля 2020

any может работать, если оно равно vector, как сказано в документации

При заданном наборе логических векторов верно ли хотя бы одно из значений?

В посте ОП оба примера не vector с. Первый - это data.frame с logical столбцами. Если мы go удовлетворяем документации, т.е. создаем логический вектор, либо преобразуем в matrix (поскольку matrix в любом случае vector с некоторыми атрибутами dim)

any(as.matrix(df1))
#[1] TRUE

Или измените его на vector с помощью unlist, используя list (a data.frame - это list из vector s или столбцов такой же длины)

any(unlist(df1))

В во втором случае появляется предупреждение, и выполняется некоторое принудительное

any(df2)
#[1] TRUE

предупреждение: в любом (c (1, 2), na.rm = FALSE): принудительный аргумент наберите 'double' для логического

...