Я обрабатываю большой набор данных (после очистки).Затем набор данных обрабатывается для создания матрицы смежности, которой передается logicEval для идентификаторов obs, которые содержат uniqueID.5
При запуске фрагмента кода для создания матрицы смежности процесс занимает огромное количество времени для обработки (а иногда просто останавливается).
Очевидно, это происходит потому, что функцияпроверка каждого из уникальных элементов (n = 10901) и маркировка ИСТИНА / ЛОЖЬ, если они появляются в наблюдении.Пример (значительно уменьшен):
|Obs_1 |Obs_2 |Obs_3 |Obs_4 |Obs_5 | logEval|
|:-----|:-----|:-----|:-----|:-----|-------:|
|TRUE |FALSE |FALSE |FALSE |FALSE | 1|
|FALSE |TRUE |FALSE |FALSE |FALSE | 1|
|FALSE |FALSE |TRUE |FALSE |FALSE | 1|
|FALSE |FALSE |FALSE |TRUE |FALSE | 1|
|FALSE |FALSE |FALSE |FALSE |TRUE | 1|
|FALSE |FALSE |FALSE |FALSE |TRUE | 1|
|FALSE |FALSE |FALSE |FALSE |FALSE | 0|
|FALSE |FALSE |FALSE |FALSE |FALSE | 0|
|FALSE |FALSE |TRUE |FALSE |FALSE | 1|
|TRUE |FALSE |FALSE |FALSE |FALSE | 1|
|FALSE |FALSE |FALSE |FALSE |TRUE | 1|
|FALSE |FALSE |FALSE |FALSE |FALSE | 0|
|FALSE |FALSE |FALSE |FALSE |FALSE | 0|
На самом деле Obs = 43 и существует> 10 0000 сравнений.
Проблема: R падает.Есть ли лучший способ выполнить это без сбоя из-за размера?
Фрагмент кода:
r
df1<-data.table(col1=sample(500000:500900,700,replace = T),
col2=sample(500000:500900,700,replace = T),
col3=sample(500000:500900,700,replace = T),
col4=sample(500000:500900,700,replace = T),
col5 = sample(500000:500900,700,replace = T),
col6 = sample(500000:500900,700,replace = T),
col7 = sample(500000:500900,700,replace = T),
col8 = sample(500000:500900,700,replace = T),
col9 = sample(500000:500900,700,replace = T),
col10 = sample(500000:500900,700,replace = T),
col11 = sample(500000:500900,700,replace = T),
col12 = sample(500000:500900,700,replace = T),
col13 = sample(500000:500900,700,replace = T),
col14 = sample(500000:500900,700,replace = T),
col15 = sample(500000:500900,700,replace = T),
col16 = sample(500000:500900,700,replace = T),
col17 = sample(500000:500900,700,replace = T),
col18 = sample(500000:500900,700,replace = T),
col19 = sample(500000:500900,700,replace = T),
col20 = sample(500000:500900,700,replace = T),
col21 = sample(500000:500900,700,replace = T),
col22 = sample(500000:500900,700,replace = T),
col23 = sample(500000:500900,700,replace = T),
col24 = sample(500000:500900,700,replace = T),
col25 = sample(500000:500900,700,replace = T),
col26 = sample(500000:500900,700,replace = T),
col27 = sample(500000:500900,700,replace = T),
col28 = sample(500000:500900,700,replace = T),
col29 = sample(500000:500900,700,replace = T),
col30 = sample(500000:500900,700,replace = T),
col31 = sample(500000:500900,700,replace = T),
col32 = sample(500000:500900,700,replace = T),
col33 = sample(500000:500900,700,replace = T),
col34 = sample(500000:500900,700,replace = T),
col35 = sample(500000:500900,700,replace = T),
col36 = sample(500000:500900,700,replace = T),
col37 = sample(500000:500900,700,replace = T),
col38 = sample(500000:500900,700,replace = T),
col39 = sample(500000:500900,700,replace = T),
col40 = sample(500000:500900,700,replace = T),
col41 = sample(500000:500900,700,replace = T),
col42 = sample(500000:500900,700,replace = T),
col43 = sample(500000:500900,700,replace = T))
#find all ids via table
uniqueIDs<-as.character(unique(unlist(df1)))
df1<-data.table(df1)
#creating adjacency matrix
mat <- sapply(uniqueIDs, function(s) apply(dt1, 1, function(x) s %in% x))
#clean-up
colnames(mat) <- uniqueIDs
rownames(mat) <- paste0("row", seq(nrow(dt1)))
mat<-data.table(mat)
mat<-data.table(t(mat))
#apply logical evaluation to count number of TRUE
mat$logEval<-rowSums(mat==TRUE)
Хотите сделать небольшое обновление, чтобы убедиться, что я делаю все в целомцель ясна:
-данат данных имеет x (43) объектов, и каждый объект имеет y (200) nbrids.
цель выполнения приведенного выше кода состоит в создании матрицы смежности для идентификатора nbrids (y), отображаемого в столбце .[Например, из уникальных nbrids, появляется ли y (1) в x (i); y (2) ... делает y (900)].
Я не имею отношения к х, по сути.конечная цель:
Из уникальных идентификаторов по всей матрице, какие уникальные идентификаторы появляются вместе и как часто [именно поэтому я создаю логический тест для подсчета.n (i) == TRUE]… для тех, кто> 2, я могу фильтровать, поскольку вполне вероятно, что такие строки совместно используют nbrids.
Пример конечной матрицы;
r
From To Weight
50012 50056 5
50012 50032 3
…
50063 50090 9
Человек с полным ртом _