автоматически предполагает, что числовые данные являются числами с плавающей запятой, если явно не указано иное

ько начал изучать R и в своем первом задании я столкнулся с проблемой, когда мне нужно сравнить кучу переменных, и при этом я должен получить ложь при сравнении двух переменных не только тогда, когда они не равны, но и когда их тип не то же самое. Например :

7 == "7"

дает истину, которая должна быть ложной. В настоящее время я делаю то же самое следующим образом:

var1 = 8 == "8"
var2 = typeof(8) == typeof("8")
var1 & var2

Я думаю, что должно быть несколько более простой подход для того же. Кажется, что он неявно преобразует 7 в «7», как это происходит, когда мы добавляем числовой к символьному вектору. Так есть ли способ получить тот же результат в 1 строке?

 Mandar Sadye02 окт. 2017 г., 18:09
@lmo функция identifier () прекрасно работает. И спасибо за предложение относительно? "==". Это фактически показало мне, как получить помощь, используя "?" :)
 Hong Ooi02 окт. 2017 г., 18:07
«<7>» не равно 7.
 lmo02 окт. 2017 г., 18:06
Вот точка в файле справки ключ к вашему вопросу:Если два аргумента являются атомарными векторами разных типов, один приводится к типу другого, причем (убывающий) порядок приоритета является символьным, сложным, числовым, целым, логическим и необработанным.
 lmo02 окт. 2017 г., 18:00
R приводит элементы так, чтобы их можно было сравнивать. В этом случае 7 становится «7», так что его можно сравнить с «7» с правой стороны. Вы могли бы сделатьidentical("7", 7), например. Прочитайте файл справки,?"=="и вы увидите, что все виды принуждения продолжаются под капотом в зависимости от ситуации.

Ответы на вопрос(1)

Решение Вопроса

?Comparison страница справки:

Если два аргумента являются атомарными векторами разных типов, один приводится к типу другого, причем (убывающий) порядок приоритета является символьным, сложным, числовым, целым, логическим и необработанным.

На той же странице справки авторы предупреждают об использовании== а также!= для испытаний вif-expressions. Они рекомендуют использоватьidentical() вместо:

7 == "7"
# TRUE
identical(7, "7")
# FALSE
 KenHBS02 окт. 2017 г., 18:29
Правда. В то же время,identical(8, 8.0) [1] TRUE, Похоже наR автоматически предполагает, что числовые данные являются числами с плавающей запятой, если явно не указано иное
 Rui Barradas02 окт. 2017 г., 18:27
Это не значит, что нельзя быть очень осторожным:identical(8L, 8) [1] FALSE, Это может произойти, если вы определите вектор, скажем,x <- 1:8 а потом попробуй сравнитьidentical(x[8], 8), Угадай результат.

Ваш ответ на вопрос