Supposons que nous avons données suivantes de jouets:Comment éviter de boucle lorsque itérer valeurs uniques dans une colonne [R]
library(tidyverse)
data <- tibble(
subject = c(1, 1, 1, 2, 2, 2, 2, 3, 3, 3),
id1 = c("a", "a", "b", "a", "a", "a", "b", "a", "a", "b"),
id2 = c("b", "c", "c", "b", "c", "d", "c", "b", "c", "c")
)
qui représentent des relations de réseau pour chaque sujet. Par exemple, il y a trois sujets uniques dans les données et le réseau pour le premier sujet pourraient être représentés comme séquence de relations:
a -- b, a --c, b -- c
La tâche consiste à calculer centralités pour chaque réseau. L'utilisation de la boucle c'est simple:
library(igraph)
# Get unique subjects
subjects_uniq <- unique(data$subject)
# Compute centrality of nodes for each graph
for (i in 1:length(subjects_uniq)) {
current_data <- data %>% filter(subject == i) %>% select(-subject)
current_graph <- current_data %>% graph_from_data_frame(directed = FALSE)
centrality <- eigen_centrality(current_graph)$vector
}
Question: Mon ensemble de données est énorme, je me demande donc comment éviter la boucle explicite for
. Dois-je utiliser apply()
et ses cousins modernes (peut-être map()
dans le paquet purrr
)? Toutes les suggestions sont les bienvenues.