从列表中获取值的方法是什么?

5
我有一个如下的大小一致的列表。我想提取键的值。怎么做呢?
我通过使用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 - m0nhawk
仅使用 v1 <- unlist(allsum),您将获得一个命名向量,它仍然是一个数值向量。例如,您可以尝试 v1 + 1000 或执行 as.data.frame(v1)names(v1)unname(v1) - Sotos
完美的@Sotos,我认为unname()是正确的选择!谢谢! - Niranjan Agnihotri
4个回答

12

@Sotos非常感谢。

我想我就是在找这个!

unname(unlist(allsum))


还可以使用 unlist(unname(cols_dict)) - Kaleb Coberly

7

关于什么?

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

或者通过使用评论中Sotos的建议来完全避免这个问题:
unname(unlist(allsum))
# [1] 7332967 5635780 5454703 3464206

运行良好!非常感谢。您能否解释一下它是如何工作的,因为只使用unlist我们只能获取键和值。 - Niranjan Agnihotri
2
我不建议那样做。它会将值转换为字符。为什么不直接使用 unname - Sotos

4

请尝试

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

0
要将列表的值作为向量获取,您应该执行以下操作:
unlist(allsum)

我使用了unlist函数并得到了上述输出。 - Niranjan Agnihotri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接