Создание (и доступ) разреженной матрицы с записями NA по умолчанию

Узнав о вариантах работы с разреженными matrixми в R , я хочу использовать пакет Matrix для создания разреженной матрицы из следующего фрейма данных и иметь все остальные элементы NA .

  srd 1 1089 3772 1 2 1109 190 1 3 1109 2460 1 4 1109 3071 2 5 1109 3618 1 6 1109 38 7 

Я знаю, что могу создать разреженную матрицу со следующим: доступ к элементам как обычно:

 > library(Matrix) > Y  Y[1089,3772] [1] 1 > Y[1,1] [1] 0 

но если я хочу, чтобы значение по умолчанию было NA, я попробовал следующее:

  M <- Matrix(NA,max(s),max(r),sparse=TRUE) for (i in 1:nrow(X)) M[s[i],r[i]] <- d[i] 

и получил эту ошибку

 Error in checkSlotAssignment(object, name, value) : assignment of an object of class "numeric" is not valid for slot "x" in an object of class "lgCMatrix"; is(value, "logical") is not TRUE 

Не только это, я считаю, что для доступа к элементам требуется гораздо больше времени.

 > system.time(Y[3,3]) user system elapsed 0.000 0.000 0.003 > system.time(M[3,3]) user system elapsed 0.660 0.032 0.995 

Как мне создать эту матрицу? Почему одна matrix работает намного медленнее?

Вот fragment кода для приведенных выше данных:

 X <- structure(list(s = c(1089, 1109, 1109, 1109, 1109, 1109), r = c(3772, 190, 2460, 3071, 3618, 38), d = c(1, 1, 1, 2, 1, 7)), .Names = c("s", "r", "d"), row.names = c(NA, 6L), class = "data.frame") 

Да, ответ Тьерри определенно верен, я могу сказать, как соавтор пакета «Матрица» …

К вашему другому вопросу: почему доступ к «М» медленнее, чем «Y»? Основной ответ заключается в том, что «М» намного реже, чем «Y», поэтому значительно меньше и – в зависимости от размеров и объема оперативной памяти вашей платформы – время доступа быстрее для гораздо меньших объектов, особенно для индексации в них ,

Почему вы хотите значения NA по умолчанию? Насколько я знаю, матрицы разрешены только в том случае, если они имеют нулевые ячейки. Поскольку NA является ненулевым значением, вы теряете все преимущества от разреженной матрицы. Классическая matrix еще более эффективна, если в матрице почти нет нhive. Классическая matrix похожа на вектор, который будет разрезан в соответствии с размерами. Поэтому он должен хранить только вектор данных и размеры. Редкая matrix хранит только ненулевые значения, но также сохраняет там местоположение. Это преимущество тогда и только тогда, когда у вас достаточно нулевых значений.

  • Можете ли вы вызвать метод по умолчанию родительского интерфейса из интерфейса, который подclassифицирует этот интерфейс?
  • Как заполнить / создать экземпляр массива C # с одним значением?
  • Почему компилятор Scala запрещает перегруженные методы с аргументами по умолчанию?
  • Переадресация по умолчанию для Error 404
  • Что означает «default» после объявления функции classа?
  • Принудительный клиент telnet в режиме символов
  • Как открыть браузер по умолчанию в C #
  • Force R не использовать экспоненциальную нотацию (например, e + 10)?
  • Почему в параметрах C ++ последнее значение должно быть добавлено последними?
  • Интерфейс с методами по умолчанию vs Абстрактный class в Java 8
  • Как загрузить пакеты в R автоматически?
  • Interesting Posts

    Будет ли сбой при завершении работы Windows на новом жестком диске после отказа предыдущего жесткого диска

    Создание имен групп для последовательных значений

    Каков самый быстрый способ запуска приложения в Windows 8?

    Дополнительные методы в интерфейсе Java

    Является ли NULL в C обязательным / определено равным нулю?

    Изменение размера ImageView для соответствия формату

    Запросить высоту UAC в Windows Vista, если путь защищен?

    Изменение настроек по умолчанию в Sublime Text 3

    Как получить доступ к ресурсам в JAR-файле?

    Как немедленно завершить блокировку streamа при операции ввода-вывода сокета?

    Файловые операции в Android NDK

    Предупреждение DataTables: запрошенный неизвестный параметр ‘0’ из источника данных для строки ‘0’

    Что определяет жизненный цикл компонента (графа объектов) в кинжале 2?

    Ошибки XML-рендеринга Предварительный просмотр Android N

    Лучший способ изменить цвет фона для NSView

    Давайте будем гением компьютера.