2016-08-09 34 views
1

Ich frage mich, ob es möglich war, die Namen von Elementen einer Liste am Ende eines Pipeline-Codes zu setzen.Setnamen in der Pipeline R-Code

Zur Zeit übergebe ich eine Reihe von Variablen in eine Funktion, die eine Liste von Datenrahmen abruft. Leider hat diese Liste nicht automatisch benannte Elemente, aber ich füge sie später "manuell" hinzu. Um die Lesbarkeit zu verbessern würde Ich mag, etwas haben, wie

data <- input_vars%>% 
    purrr::map(get_comm_data) %>% 
    setnames(input_vars) 

jedoch folgt, das gibt mir die folgende Fehlermeldung: (., Input_vars) Fehler in setnames: x ist kein data.table oder data.frame

Hat jemand eine elegante Lösung?

Jede Hilfe wird geschätzt!

+0

Es wäre einfacher mit einem reproduzierbaren Beispiel. Hier, 'setnames', wenn eine Funktion aus dem' data.table' Paket exportiert wurde und Sie nicht mit 'data.table' arbeiten. Base R-Funktion ist 'setNames' und sollte funktionieren. Sie könnten auch 'set_names' aus' purrr' Paket verwenden. – cderv

+0

Sie sollten die Dokumente für die Funktionen lesen, die Sie verwenden möchten, und nicht einfach den Namen der Funktion erraten, die Sie benötigen. Versuchen Sie in diesem Fall '? Setnames'. – Frank

Antwort

4

Um Namen eines Objekts in einer Pipeline verwenden setNames oder purrr::set_names

1:3 %>% 
    purrr::map(~ rnorm(5, .x)) %>% 
    purrr::set_names(paste0('V', 1:3)) 
#> $V1 
#> [1] 1.4101568 2.0189473 1.0042691 1.4561920 0.8683156 
#> 
#> $V2 
#> [1] 2.0577889 2.4805984 1.4519552 0.9438844 0.4097615 
#> 
#> $V3 
#> [1] 0.4065113 4.0044538 2.8644864 2.4632038 4.0581380 
1:3 %>% 
    purrr::map(~ rnorm(5, .x)) %>% 
    setNames(paste0('V', 1:3)) 
#> $V1 
#> [1] 0.52503624 0.69096126 0.08765667 0.97904520 0.29317579 
#> 
#> $V2 
#> [1] 2.561081 1.535689 1.681768 2.739482 1.842833 
#> 
#> $V3 
#> [1] 2.619798 1.341227 2.897310 2.860252 1.664778 

Mit purrr::map setzen Sie auch Ihre input_vars als map halten Namen nennen könnte.

c(V1 = 1, V2 = 2, V3 = 3) %>% 
    purrr::map(~ rnorm(5, .x)) 
#> $V1 
#> [1] 1.74474389 1.69347668 -1.03898393 0.09779935 0.95341349 
#> 
#> $V2 
#> [1] 1.5993430 0.8684279 1.6690726 2.9890697 3.8602331 
#> 
#> $V3 
#> [1] 3.453653 3.392207 2.734143 1.256568 3.692433