Ho due elenchi e voglio renderli coerenti in termini di NA
. Metti NA Ogni volta che c'è NA in uno dei due elenchi, senza modificare nulla nella struttura dell'elenco.Come trattare con NA in due elenchi?
set.seed(123)
m1 <- matrix(nrow=2,ncol=2,data=runif(4))
m1[1,1] <- NA
m2 <- matrix(nrow=2,ncol=2,data=runif(4))
m2[1,2] <- NA
lis <- list(m1, m2)
m1 <- matrix(nrow=2,ncol=2,data=runif(4))
m2 <- matrix(nrow=2,ncol=2,data=runif(4))
m2[2,1] <- NA
bis <- list(m1, m2)
ho provato questo, ma senza successo bis[is.na(lis)]=NA
output desiderato:
> lis
[[1]]
[,1] [,2]
[1,] NA 0.9568333
[2,] 0.4566147 0.4533342
[[2]]
[,1] [,2]
[1,] 0.9404673 NA
[2,] 0.0455565 NA
> bis
[[1]]
[,1] [,2]
[1,] NA 0.9568333
[2,] 0.4566147 0.4533342
[[2]]
[,1] [,2]
[1,] 0.6775706 NA
[2,] 0.5726334 NA
sostituire la prima riga con: 'z <- Mappa (funz ione (...) {punti <- as.list (...); arr <- do.call (abind, c (dots, along = 3)); apply (arr, 1: 2, any)}, lapply (lis, is.na), lapply (bis, is.na)) '. Penso che dovrebbe funzionare. Probabilmente però più lento. Ha bisogno del pacchetto 'abind'. La chiave sta sostituendo '|' con 'any'. – Bazz
@Bazz, vai avanti e aggiungilo alla risposta. Vedrò se riesco a trovare un approccio diverso –
è un adattamento della tua risposta, non mia. 'as.list' dovrebbe essere semplicemente' list'. – Bazz