Я понимаю, что могу извлекать подматрицы из уже созданной матрицы, но я хочу иметь возможность сначала создавать подматрицы, а затем объединять созданные подматрицы, чтобы сформировать большую матрицу, чтобы сэкономить место и время. Например, в моем примере я хочу иметь возможность создать подматрицу для идентификаторов с NA (1-10) и идентификаторов без NA (11-20), а затем объединить две матрицы вместе, чтобы сформировать большую матрицу, но я не получаю ее , хотел бы, если кто-нибудь может предложить, что должно быть в моих кодах, учитывая, что я буду делать одинаковые расчеты как с NA, так и без NA.
PS: я также хочу иметь возможность сохранять эти подматрицы отдельно, прежде чем объединять их вместе в единую матрицу (20x20)
dorm<-function(data)
{
library(Matrix)
n<-max(as.numeric(fam[,"ID"]))
t<-min(as.numeric(fam[,"ID"]))
A <- sparseMatrix(i = n, j=n, x=n)
while(t <=n) {
for( t in t:n ){
s <- max(fam[t,"dad"],fam[t,"mum"])
d <- min(fam[t,"dad"],fam[t,"mum"])
if( !is.na(s) ){
if( !is.na(d) ){
A[t,t] = 2-0.5^(fam[t,"GEN"]-1)+0.5^(fam[t,"GEN"])*A[fam[t,"dad"],fam[t,"mum"]]
tmp = 0.5 * (A[1:(t-1),s] + A[1:(t-1),d])
A[t, 1:(t-1)] = tmp
A[1:(t-1), t] = tmp
} else {
A[t,t] = 2-0.5^(fam[t,"GEN"]-1)
tmp = 0.5 * A[1:(t-1),s]
A[t, 1:(t-1)] = tmp
A[1:(t-1), t] = tmp
}
} else {
A[t,t] = 2-0.5^(fam[t,"GEN"]-1)
}
message(" MatbyGEN: ", t)
}
return(A)
}
}
fam <- structure(list(ID = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L,
11L, 12L, 13L, 14L, 18L, 15L, 16L, 17L, 20L, 19L), dad = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, 1L, 1L, 4L, 6L, 4L, 10L,
12L, 13L, 13L, 14L), mum = c(NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, 2L, 3L, 2L, 5L, 11L, 11L, 5L, 3L, 7L, 2L), GEN = c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L,
3L, 3L, 3L)), class = "data.frame", row.names = c(NA, -20L))
A <- dorm(fam)
n <- 1e6;d <- rnorm(n);r <- seq(n);c <- sample(r);system.time(mm <- sparseMatrix(i = r, j = c, x = d))
. занимает примерно 0,24 секунды на моем маленьком ноутбуке. - person Oliver   schedule 30.09.2019NA
результаты оказываются неразреженными. См. также: stackoverflow.com/questions/57301390/ - person Cole   schedule 30.09.2019bigmemory
матрицы (cran.r-project.org /web/packages/bigmemory/index.html), если у вас происходит сбой или заканчивается нехватка памяти при попытке сгенерировать большие матрицы. - person Richard J. Acton   schedule 30.09.2019lower.tri
иdiag
, что уменьшит требования к памяти на 50%. Если вы зададите еще один вопрос с исходным примером из 4000 строк, мне было бы интересно протестироватьRcpp
. - person Cole   schedule 01.10.2019