2017-05-31 105 views
-2

我有一个统一大小的列表如下。我想提取键的值。我该怎么做?如何从列表中获取值?

我已经分离使用names(allsum)键,其中allsum看起来像这样

`$1999 
[1] 7332967 

$2002 
[1] 5635780 

$2005 
[1] 5454703 

$2008 
[1] 3464206` 

我想[7332967, 5635780, 5454703, 3464206]作为输出。我试过sapply,但有一个弱的直觉。请帮忙。

for(a in allsum) { 
    print(a[[1]]) 
} 

我试过这个,它的工作原理,但我想知道如果我们可以用一些函数或没有任何明确的循环做到这一点。

我尝试使用unlist 以下是发生了什么

c1 <- unlist(allsum) 
#1999 2002 2005 2008 
#7332967 5635780 5454703 3464206 

我需要的只是大的数字。我如何提取?

+2

如果你使用'lapply'并获得此作为一个输出,可以考虑使用['sapply'(https://stackoverflow.com/a/7141669/1030110)。 – m0nhawk

+0

只用v1 < - unlist(allsum)'得到的是一个有名的向量,它仍然是一个数字向量。例如,你可以尝试'v1 + 1000'或者'as.data.frame(v1)',或者'names(v1)'和'unname(v1)' – Sotos

+0

Perfect @Sotos I thing unname()是正确的去做!!谢谢!! –

回答

2

什么

allsum <- list(`1999` = 7332967, `2002` = 5635780, 
       `2005` = 5454703, `2008` = 3464206) 

paste(unlist(allsum)) 
# [1] "7332967" "5635780" "5454703" "3464206" 

编辑:

正如在评论中指出,paste会将数值转换为字符串。

您可以解决的问题,通过paste(unlist(allsum))与创造:

as.numeric(paste(unlist(allsum)) 
# [1] 7332967 5635780 5454703 3464206 

或避免这一问题完全用在评论索托斯的建议,:

unname(unlist(allsum)) 
# [1] 7332967 5635780 5454703 3464206 
+0

Works fine!非常感谢您能解释它是如何工作的,因为只使用'unlist'我们只是得到了键和值 –

+1

我不会推荐。它将值转换为字符。为什么不简单地'unname'? – Sotos

0

获取,列出的作为载体的价值观,你应该做的:

unlist(allsum) 
+0

我用unlist得到了上面的输出 –

2

请尝试

as.integer(allsum) 
#[1] 7332967 5635780 5454703 3464206 
2

@Sotos非常感谢。

我想我只是在寻找这个!

unname(unlist(allsum))