2017-04-18 5 views
1

lapplyまたはmappurrrから取得しようとしていますが、ビルド中のより大きな関数の一部としてリストから名前を取得しようとしています。私は予期せぬ結果を得続けます。例えば:purrrパッケージのlapply()またはmap()を使用してリスト要素の名前を抽出する

MyList=list(x=1:5, y=6:10) 

> MyList 
$x 
[1] 1 2 3 4 5 

$y 
[1] 6 7 8 9 10 

names(MyList) 
[1] "x" "y" 
### seems OK 

map(MyList,names) 
$x 
NULL 

$y 
NULL 

map_chr(MyList,names) 
Error: Result 1 is not a length 1 atomic vector 

lapply()map()と同じ結果を与えます。私が戻ってくるオブジェクトは、listです。その要素には、私が望む名前がありますが、各要素の内容はNULLです。私は、リスト内の要素または文字ベクトルとして名前自体を抽出したいと思います。なぜこうなった?私はこれをどのように達成すべきですか?

+4

'名(MYLIST)'をここでは例ですか?名前を持つのは 'MyList'です。 'MyList'、' MyList $ x'および 'MyList $ y'の内容には名前はありません。 – BrodieG

+0

@BrodieGありがとう - 私はばかだ。 –

答えて

1

残念ながら、mapまたはlapplyを使用して要素名を取得する方法はありません。要素名を必要とするmapまたはlapplyのカスタム関数を使用しているときは、要素名のベクトルにmapを渡してから、それを使用してリストからデータを取得します。

library(dplyr) 
library(purrr) 

MyList = list(Normal = rnorm(1000), 
       Gamma = rgamma(1000, shape = 4), 
       Weibull = rweibull(1000, shape = 1)) 

ListNames <- names(MyList) 

ListNames %>% 
    walk(function(x) { # walk is another version of map 
    data <- MyList[[x]] 
    cat("\nMean of ", x, "is ", mean(data)) 
    cat("\nMedian of ", x, "is ", median(data)) 
    }) 

います:

Mean of Normal is 0.03043051 
Median of Normal is 0.01864171 
Mean of Gamma is 3.884722 
Median of Gamma is 3.500294 
Mean of Weibull is 0.9854814 
Median of Weibull is 0.6707907 
関連する問題