2017-10-19 4 views
1

Je pense que cetteUtiliser `purrr :: map` avec k-means

kmeans(x = matrix(1:50, 5), centers = 2, iter.max = 10) 

Peut-être écrire:

matrix(1:50, 5) %>% 
map(~kmeans(x = .x, centers = 2, iter.max = 10)) 

Error in sample.int(m, k) : 
    cannot take a sample larger than the population when 'replace = FALSE' 

Mais la seconde ne fonctionne pas. Comment utiliser kmeans en combinaison avec purrr::map()?

+1

Pourquoi avez-vous besoin de 'map' ici? 'matrice (1:50, 5)%>% kmeans (., centres = 2, iter.max = 10)'. Une 'matrice' est un' vecteur' avec des attributs dim. Quand vous faites 'map', il passe par chaque observation. – akrun

+0

@akrun parce que dans mon exemple original j'ai plusieurs matrices (mises à l'échelle, avec/sans certaines variables, etc.), et je voudrais comparer les résultats du regroupement les uns par rapport aux autres. – Dambo

+1

Je ne suis pas sûr d'avoir compris. Si vous avez plusieurs matrices dans une 'liste', alors' map' peut être appliqué – akrun

Répondre

2

Le matrix est à lui seul un vector avec des attributs dim. Ainsi, lorsque nous appliquons directement map sur le matrix, il passe par chacun des éléments individuels. Au lieu de cela, placez-le dans un list

list(matrix(1:50, 5)) %>% 
     map(~kmeans(x = .x, centers = 2, iter.max = 10)) 

Notez que pour un seul matrix, on n'a pas besoin map

matrix(1:50, 5) %>% 
     kmeans(., centers = 2, iter.max = 10) 

Il devient utile lorsque nous avons un list de matric es

list(matrix(1:50, 5), matrix(51:100, 5)) %>% 
      map(~kmeans(x = .x, centers = 2, iter.max = 10))