2017-03-19 33 views
0

有沒有一種最好的方法來提取列表的下層元素?
例如,此列表中的人有一系列「人物」,每個人物的編號爲「people[[i]]$Expertise$R」。
有沒有最好的方法來提取它們作爲矢量?
我希望使用rlist和它的好處來加載我需要的東西,但是我看不到這個功能。
下面是一個例子做什麼,我需要,但可能未達最佳的:提取列表中的「lower」/「terminal」元素R

#https://renkun.me/rlist-tutorial/Features/Filtering.html 
#install.packages("rlist") 

library(rlist) 
people <- list.load("http://renkun.me/rlist-tutorial/data/sample.json") 
length(people) 
str(people) 
people[[1]][[1]]$R 
str(list.filter(people, Age >= 25)) 

Rskill<-numeric() 
for(i in 1:length(people)) 
Rskill<-c(Rskill,people[[i]]$Expertise$R) 
Rskill 

unlist(lapply(1:length(people),function(i) people[[i]]$Expertise$R)) 
+0

請提供一個可重複的例子。 http://stackoverflow.com/q/5963269/1691723 – Sathish

+0

@Sathish:OP的例子看起來可以重現給我 –

+0

我不熟悉'rlist',但是你可以讓你的'lapply()'更簡單一些,更強大':vapply(people,function(p)p $ Expertise $ R,integer(1))' –

回答

0

我覺得sapply是提取的R值作爲載體的最簡單方法:

sapply(people,function(l)l$Expertise$R) 
+0

更多選項,非常感謝Enrico和Feng – user3156942

0

我不知道的rlist包,但你可以通過

sapply(people, function(x) x$Expertise$R) 

提取Rskill或者,如果你喜歡一個循環,與

Rskill <- numeric(length(people)) 
for (i in seq_along(people)) 
    Rskill[[i]] <- people[[c(i, 4, 1)]] 

後者的工作原理是因爲列表是可以有意義地處理(例如提取)第n個元素的意義上的「向量」。在嵌套列表中,您可以通過數字矢量訪問單個元素。

0

vapply()是一個更強大的替代你的lapply(),保證了輸出的類型(在這裏,"integer"):

vapply(people, function(p) p$Expertise$R, integer(1)) 
# [1] 2 3 1 

rlist似乎提供了類似的功能與list.mapv()

list.mapv(people, .$Expertise$R, "integer") 
# [1] 2 3 1 

# Or even simpler, saving typing two characters ;-) 
list.mapv(people, Expertise$R, "integer") 
# [1] 2 3 1 
+0

@ user3156942如果這回答了你的問題,你能否將其標記爲已接受? –