Je veux calculer setdiff
en utilisant des éléments de deux listes.
Pour ce faire, j'ai créé une fonction qui fonctionne correctement lorsque je fournis les arguments, mais qui échoue lorsque j'essaie d'utiliser la fonction mapply
.
# The lists have the following structure
list_A <- list(
vec_A1 = list(v1="1",v2="2",v3="3"),
vec_A2 = list(v1="3",v2="4",v3="5")
)
list_B <- list(
mat_B1 = matrix(as.character(1:3),nrow = 3,ncol = 1),
mat_B2 = matrix(as.character(3:5),nrow = 3,ncol = 1)
)
myfun <- function(vec,mat){
vec = unlist(vec) # Create a vector from the list's elements
mat = mat[[1]] # Extract the required matrix
x = apply(mat,1,base::setdiff,x=vec) %>% t # Compare the vector with each matrix row
return(x)
}
# It gives my desired output when applied over single elements from the lists
myfun(list_A[1],list_B[1])
myfun(list_A[2],list_B[2])
# But fails when using mapply
mapply(myfun,list_A,list_B, SIMPLIFY = F)
La sortie souhaitée est
[,1] [,2]
[1,] "2" "3"
[2,] "1" "3"
[3,] "1" "2"
[,1] [,2]
[1,] "4" "5"
[2,] "3" "5"
[3,] "3" "4"
Mais avec mapply j'obtiens
Error in apply(mat, 1, base::setdiff, x = vec) :
dim(X) must have a positive length
Des indices sur ce que je manque ?
Merci d'avance.