#r
#r
Вопрос:
Я всегда слышал, что identical()
это «безопаснее», чем ==
. Но, играя с ними обоими, кажется, что желаемый результат достигается последним, а не первым. Я предполагаю, что это как-то связано с атрибутами объекта, сгенерированного nrow()
, но было бы неплохо уточнить, почему это происходит в примере ниже:
> identical(3653510 2751069, 6404579)
[1] TRUE
> identical((3653510 nrow(df)), nrow(df2))
[1] FALSE
> nrow(df)
[1] 2751069
> nrow(df2)
[1] 6404579
> nrow(df2)-nrow(df)
[1] 3653510
> (3653510 nrow(df))==nrow(df2)
[1] TRUE
Итак, подводя итог, у меня есть два вопроса:
- Что происходит с
identical()
? - Что мы имеем в виду, говоря, что функция «безопаснее» для использования в этом контексте?
Комментарии:
1. Попробуйте использовать
all.equal
.identical
также проверяет атрибуты2. … так что, вероятно, разница между
numeric
иint
, т. е.class(3653510 2751069); class(6404579); class(3653510 nrow(df)); class(nrow(df2))
Ответ №1:
Это может быть разница в атрибутах. например
n1 <- 2751069
n2 <- 6404579
identical((3653510 n1), n2)
#[1] TRUE
Оба являются числовым классом. Если мы изменим одно из них на integer
, оно вернет FALSE
n2 <- 6404579L
identical((3653510 n1), n2)
#[1] FALSE
С помощью all.equal
мы также можем указать check.attributes = FALSE
all.equal((3653510 n1), n2, check.attributes = FALSE)
#[1] TRUE