2016-08-09 3 views
1

パイプラインコードの最後にリストの要素の名前を設定できるかどうかは疑問でした。パイプラインのsetnames Rコード

data <- input_vars %>% 
    purrr::map(get_data) 

    names(data) <- input_vars 

現在、変数の文字列をデータフレームのリストを取得する関数に渡します。残念ながら、このリストは自動的に名前付き要素を持っていませんが、後で「手動で」追加します。読みやすさを改善するために、私は

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

を次のように何かを持っていると思いますが、これは私に次のエラー与える:setnamesでエラー(、input_varsを。):xはdata.tableかdata.frameではありません

誰かがこれに優雅な解決策を持っていますか?

ご協力いただきましてありがとうございます。

+0

再生産可能な例があれば簡単です。ここで、 'data.table'パッケージからエクスポートされたものが' setnames'であり、 'data.table'で作業していないようです。 ベースR関数は 'setNames'であり、動作するはずです。 'purrr'パッケージから' set_names'を使うこともできます。 – cderv

+0

必要な機能の名前を推測するのではなく、使用しようとしている機能のドキュメントを読む必要があります。この場合、 '?setnames'を試してみてください。 – Frank

答えて

4

purrr::mapsetNamesまたは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 

を使用し、パイプラインでオブジェクトの名前を設定するにはmap名前を保つよう、また、あなたinput_varsに名前を付けることができます。

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