J'essaie de trouver une corrélation de toutes les variables dans une variable de regroupement. Plus précisément, j'essaie d'utiliser purrr pour remplacer une boucle que j'ai utilisée. Mais je suis un peu coincé, en partie parce que je veux utiliser deux fonctions lors de l'application sur le vecteur d'intérêt. Par exemple:Essayer de remplacer une boucle par purrr :: map_dbl et utiliser corrr :: correlate
## load packages
library(corrr)
library(dplyr)
library(purrr)
Sans un groupe cela fonctionne très bien (ce qui est la base de ce que je voudrais faire):
iris %>%
select(-Species) %>%
correlate() %>%
stretch()
Mais je me contrecarrés lorsque je tente de groupe ceci:
iris %>%
group_by(Species) %>%
correlate() %>%
stretch()
Error in stats::cor(x = x, y = y, use = use, method = method) : 'x' must be numeric
donc, ma pensée est d'utiliser purrr
... semble être l'endroit exact où je l'utilise pas?
iris %>%
split(.$Species) %>%
map_dbl(~correlate) ## then how do i incorporate `stretch()`
Error: Can't coerce element 1 from a closure to a double
Il est évident que cela est faux, mais je ne sais pas exactement comment j'appliquer map_*
ici ...
C'est la boucle ce que je suis en train de remplacer ce qui ne donne la sortie correcte mais Je préfère ne pas l'utiliser - il est moins flexible que l'approche purrr
:
Species <- unique(iris$Species)
df <- c()
for(i in seq_along(Species)){
u <- iris %>%
filter(Species == Species[i]) %>%
select(-Species) %>%
correlate() %>%
stretch() %>%
mutate(Species = Species[i])
df <- rbind(df, u)
}
df
# A tibble: 48 x 4
x y r Species
<chr> <chr> <dbl> <fctr>
1 Sepal.Length Sepal.Length NA setosa
2 Sepal.Length Sepal.Width 0.7425467 setosa
3 Sepal.Length Petal.Length 0.2671758 setosa
4 Sepal.Length Petal.Width 0.2780984 setosa
5 Sepal.Width Sepal.Length 0.7425467 setosa
6 Sepal.Width Sepal.Width NA setosa
7 Sepal.Width Petal.Length 0.1777000 setosa
8 Sepal.Width Petal.Width 0.2327520 setosa
9 Petal.Length Sepal.Length 0.2671758 setosa
10 Petal.Length Sepal.Width 0.1777000 setosa
donc, en somme, quelqu'un peut-il expliquer comment utiliser purrr
quand j'ai besoin d'utiliser deux fonctions. En d'autres termes, comment remplacer la boucle ci-dessus?
Ok! Je vais cependant attendre un peu pour accepter cela, car je me demande s'il y a une réponse basée sur le purrr. Ou dites-vous qu'il n'est pas possible de le faire en purrr? – boshek
Il y a beaucoup de façons de le faire dans 'purrr'; Je pensais que 'group_by%>% do' est déjà assez simple. Fourni une alternative avec 'purrr', voir la mise à jour. – Psidom
Doublement utile! Ma compréhension était que la façon préférée de faire les choses était via map_ * plutôt que do, c'est pourquoi j'ai demandé cette approche. – boshek