Arhn - архитектура программирования

Поведение при суммировании результатов !is.na()

Почему первая строка возвращает ИСТИНА, а третья строка возвращает 1? Я ожидаю, что обе строки вернут 1. Каково точное значение этих двух дополнительных скобок в третьей строке?

!is.na(5) + !is.na(NA)
# TRUE
(!is.na(5)) + (!is.na(NA))
# 1

редактировать: следует проверять это несколько раз. Первоначальная проблема была с !is.na(), думал, что она повторяется для is.na(). Но не получилось :)


  • ... Не удостоверился... Первоначальная проблема была с !is.na(). Попробуй это сейчас :) 15.07.2013
  • Это также относится к !TRUE + !FALSE и (!TRUE) + (!FALSE). То есть это не имеет отношения к is.na 15.07.2013
  • @Xachriel Поскольку вы здесь относительно недавно, вы можете прочитать о и faq о том, как работает SO. StackOverflow становится гораздо более ценным для всех, если, получив ответ, решающий вашу проблему (у вас отличный ответ!!!), вы принимаете его, щелкнув маленькую галочку или проголосовав за полезный ответ. Вы абсолютно не обязаны делать ни то, ни другое, но это отличный способ отблагодарить сайт, если ответ действительно решил вашу проблему. Спасибо! 17.07.2013

Ответы:


1

! имеет странный, нелогичный приоритет в R .

Ваш первый код эквивалентен

!(is.na(5) + !is.na(NA))

То есть ! имеет более низкий приоритет, чем +.

15.07.2013
  • +1 - Это означает, что вы можете получить странные результаты, такие как: !TRUE + FALSE equals FALSE и FALSE + !TRUE equals 0 Это ранит мой мозг. 15.07.2013
  • Для шепелявых: codetools::showTree(quote(!is.na(5) + !is.na(NA))) 15.07.2013
  • Просто показывает: независимо от языка, о котором идет речь, используйте несколько дополнительных наборов скобок, чтобы избежать двусмысленности. 15.07.2013
  • @Carl Карл, я считаю это очень плохим ориентиром. Излишние круглые скобки вносят визуальный беспорядок, который необходимо сопоставить с повышенной ясностью. Для элементарных операций (вспомните BODMAS, но для программистов) лишние скобки ухудшают читабельность. 15.07.2013
  • De gustibus non disputandam. Приличный редактор предоставит цвет или другую подсветку для соответствия фигурным скобкам. Я понимаю проблему удобочитаемости, поэтому я не предлагаю использовать слишком большие скобки. Еще один момент: код часто оказывается перенесенным с одного языка на другой. Всегда, когда есть нестандартный или неинтуитивный приоритет, очень помогают скобки. 15.07.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..