【问题标题】:Losing data by using the function unlist使用函数 unlist 丢失数据
【发布时间】:2012-01-01 23:38:58
【问题描述】:

我有一个简单但奇怪的问题。

indices.list 是一个列表,包含 118,771 个元素(整数或数字)。通过应用 unlist 函数,我丢失了大约 500 个元素。

看下面的代码:

> indices <- unlist(indices.list, use.names = FALSE)
> 
> length(indices.list)
[1] 118771
> length(indices)
[1] 118248

这怎么可能?我检查了 indices.list 是否包含任何 NA。但它没有:

> any(is.na(indices.list) == TRUE)
[1] FALSE

data.set.merged 是一个包含超过 200,000 行的数据框。当我使用向量索引(显然长度为 118,248)来获取 data.set.merged 的​​子集时,我得到一个包含 118,771 行的数据框!??太奇怪了!

data.set.merged.2 <- data.set.merged[indices, ]
> nrow(data.set.2)
[1] 118771

有什么想法吗?

【问题讨论】:

  • 能否请您提供更多有关indicesindices.list 的信息,例如class(indicies)str(indicies) 等。
  • 我真的很想见dput(indices.list) =)
  • 好的,我查看了 dput(indices.list) 并找到了一些元素 integer(0)。这可能是问题所在。如何测试有多少元素等于 intrger(0)? integer(0) 到底是什么意思?我使用 grep 函数创建了 indices.integer。
  • integer(0) 只是一个整数类型的零长度向量。您可以通过检查它们的长度来找到这些东西,长度为 0。它们也将被删除 bu unlist 以及 NULL。但是,如果您期望得到好的答案,您将不得不更加积极地提供相关、有用(可重现!)的信息。

标签: r


【解决方案1】:

嗯,对于你的第一个谜,可能的解释是indices.list 的某些元素是NULL,这意味着当你使用unlist 时它们会消失:

unlist(list(a = 1,b = "test",c = 2,d = NULL, e = 5))
     a      b      c      e 
   "1" "test"    "2"    "5" 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 2021-08-03
    • 2019-06-20
    相关资源
    最近更新 更多