Мне нужно кратко объяснить контекст, прежде чем сообщить вам мой вопрос.
Я пытаюсь обработать большой график, а именно круги общения: 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, чтобы применить функцию? Или любой другой, более быстрый способ получить такой же результат, как матрица М? Любые предложения / комментарии с благодарностью!
Спасибо, что потратили время на чтение этого длинного поста!