0
votes

Pourquoi peut-on utiliser la fonction irréaliste ()? (Exemple à l'intérieur)

Je suis en train d'apprendre les bases de R et de messages à traverser un exemple dans lequel l'utilisateur charge un fichier .csv contenant les poids des souris nourries une commande contrôle normal ou graisse élevée .

Il procède à faire deux vecteurs (est-ce vrai? Une fois extrait et non répercuté?)

Je suis confus quant à l'objectif que la fonction irrégulière sert ici. IV a vu la fonction irréaliste utilisée avant le graphique et je suis confus quant à la différence qu'il fait? Entrez la description de l'image ici


0 commentaires

3 Réponses :


1
votes

Eh bien, cela dépend simplement de ce que vous voulez réaliser. Avant le olisateur (), vous finirez avec données.frame (ou plus spécifique un tibble dans cet exemple en raison de la fonctionnalité dplyr appliquée aux données). Lors de la libération de la colonne unique, vous vous retrouverez avec un vecteur numérique atomique (nommé), ce qui se comporte totalement différent dans certaines situations (le dernier RBind ci-dessous est un exemple).

library(tidyverse)
mice <- structure(list(Diet=c("chow","chow","chow","chow","chow",
"chow","chow","chow","chow","chow","chow","chow","hf",
"hf","hf","hf","hf","hf","hf","hf","hf","hf","hf","hf"
),Bodyweight=c(21.51,28.14,24.04,23.45,23.68,19.79,28.4,
20.98,22.51,20.1,26.91,26.25,25.71,26.37,22.8,25.34,
24.97,28.14,29.58,30.92,34.02,21.9,31.53,20.73)),class=c("spec_tbl_df",
"tbl_df","tbl","data.frame"),row.names=c(NA,-24L),spec=structure(list(
cols=list(Diet=structure(list(),class=c("collector_character",
"collector")),Bodyweight=structure(list(),class=c("collector_double",
"collector"))),default=structure(list(),class=c("collector_guess",
"collector")),skip=1),class="col_spec"))

bodyweight <- mice %>% filter(Diet == "chow") %>% select(Bodyweight)
class(bodyweight)
#> [1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame"
bodyweight
#> # A tibble: 12 x 1
#>    Bodyweight
#>         <dbl>
#>  1       21.5
#>  2       28.1
#>  3       24.0
#>  4       23.4
#>  5       23.7
#>  6       19.8
#>  7       28.4
#>  8       21.0
#>  9       22.5
#> 10       20.1
#> 11       26.9
#> 12       26.2

bodyweight_unl <- mice %>% filter(Diet == "chow") %>% select(Bodyweight) %>% unlist
class(bodyweight_unl)
#> [1] "numeric"
bodyweight_unl
#>  Bodyweight1  Bodyweight2  Bodyweight3  Bodyweight4  Bodyweight5  Bodyweight6 
#>        21.51        28.14        24.04        23.45        23.68        19.79 
#>  Bodyweight7  Bodyweight8  Bodyweight9 Bodyweight10 Bodyweight11 Bodyweight12 
#>        28.40        20.98        22.51        20.10        26.91        26.25

rbind(bodyweight, 1:12)
rbind(bodyweight_unl, 1:12)


0 commentaires

3
votes

Fonctions DLYR, tels que Filtre () et SELECT () , retour TIBBLES (une variante sur les données.Frames). Les cadres de données et les tibbles sont un type de liste spécial, où chaque élément est un vecteur de la même longueur, mais pas nécessairement le même type.

Dans l'exemple donné, chaque instruction sélectionne une seule colonne, renvoyée sous forme de 1- colonne tibble. Un Tibble de 1 colonne est une liste avec un élément, dans ce cas le vecteur des poids corporels. Cependant, de nombreuses fonctions ne s'attendent pas à un tibble (ou à des données) de 1 colonne, mais veulent un vecteur. En utilisant Unlist () , nous écrasons la structure sur un seul vecteur. Cela serait vrai si vous avez sélectionné une colonne unique ou plusieurs colonnes.

la voie idiomatique dans dplyr serait de tuyer tirez (poids corporel) , par opposition à l'utilisation de Unlist () .

considère cet exemple simple pour la différence xxx


1 commentaires

Je suis tout à fait d'accord avec la recommandation pull () . Utilisation de Unlist () Dans ce cas, ne semble tout simplement pas très obligatoire.



1
votes

Le but de irréaliste code> est pour aplatir une liste de vecteurs dans un seul vecteur. em> cela vient de R pour la science des données . Cela vaut certainement la peine de lire.

Voir d'autres explications dans les commentaires ci-dessous. P>

library(tidyverse)


head(data)
#>   Diet Bodyweight
#> 1 chow      21.51
#> 2 chow      28.14
#> 3 chow      24.04
#> 4 chow      23.45
#> 5 chow      23.68
#> 6 chow      19.79
# without unlist you get a data.frame
dplyr::filter(data, Diet == 'chow') %>% select(Bodyweight) %>% class()
#> [1] "data.frame"

# by unlisting you get a named vector with the names taken from the selected data
dplyr::filter(data, Diet == 'chow') %>% select(Bodyweight) %>% unlist()
#>  Bodyweight1  Bodyweight2  Bodyweight3  Bodyweight4  Bodyweight5  Bodyweight6 
#>        21.51        28.14        24.04        23.45        23.68        19.79 
#>  Bodyweight7  Bodyweight8  Bodyweight9 Bodyweight10 Bodyweight11 Bodyweight12 
#>        28.40        20.98        22.51        20.10        26.91        26.25

# If you set use.names=F you get a vector with the data you selected
dplyr::filter(data, Diet == 'chow') %>% select(Bodyweight) %>% unlist(use.names = F)
#>  [1] 21.51 28.14 24.04 23.45 23.68 19.79 28.40 20.98 22.51 20.10 26.91 26.25


0 commentaires