R data.table: как использовать функцию apply? - PullRequest
0 голосов
/ 23 марта 2020

Мне нужно кратко объяснить контекст, прежде чем сообщить вам мой вопрос.

Я пытаюсь обработать большой график, а именно круги общения: Google+ здесь . Файл gplus_combined.txt , загруженный с этого сайта, считывается с использованием пакета data.table:

library(data.table)
data = fread('gplus_combined.txt',stringsAsFactors = TRUE)  

Переменные данные имеют размеры dim (data) = c (30494865,2 ) и вот пример строки данных:

>data[1,]
>1: 112188647432305746617 107727150903234299458

Две длинные целые строки являются идентификаторами узлов графа, и каждая строка данных соответствует ребру между идентификаторами первого и второго узлов , Поскольку работать с такими идентификаторами узлов не очень удобно, я бы хотел преобразовать их в числа с помощью функции R strtoi . Вот что я попробовал

  M = matrix(0,2,2)
  for (i in 1:2) {
    for (j in 1:2) {
      M[i,j] = strtoi(data[i,j,with = FALSE])
    }
  }
  print(M)

      [,1]  [,2]
[1,] 47826 45374
[2,] 65616  2462

Это хорошо работает, всего для двух строк данных. Но это слишком медленно для обработки около 30 миллионов строк данных. Поэтому я хочу использовать функцию R , применить , чтобы ускорить вычисления. Проблема в том, что если я просто использую

apply(data[1:2,], 1:2, strtoi)

[1,] NA NA
[2,] NA NA

, то он возвращает матрицу 2x2 с записями NA. Обратите внимание, что для получения матрицы M, приведенной выше, мне нужно включить параметр с = FALSE,

strtoi(data[i,j,with = FALSE])

, иначе M также будет матрицей записей NA. Есть ли способ передать опцию с = FALSE, чтобы применить функцию? Или любой другой, более быстрый способ получить такой же результат, как матрица М? Любые предложения / комментарии с благодарностью!

Спасибо, что потратили время на чтение этого длинного поста!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...