【问题标题】:Using rbind with do.call returns unexpected character matrix size将 rbind 与 do.call 一起使用会返回意外的字符矩阵大小
【发布时间】:2015-05-07 10:49:13
【问题描述】:

我有一个由 stringr 包中的 str_match_all 生成的字符矩阵列表。我正在使用 do.call(rbind, d1) 将列表变成一个大矩阵。但是,生成的大矩阵的行数少于矩阵列表中的行数。为什么会这样?这是我的代码:

d1 <- str_match_all(as.character(d$variable), 
"([a-z]+)([0-9]{4})\\.(SQ\\d{3})_(SQ\\d{3})\\."
)

d2 <- do.call(rbind, d1)
  • d1 是 39798 个 1x5 字符矩阵的列表
  • d2 是一个 35208 x 5 矩阵

如果我理解 do.call 和 rbind 的工作方式,我应该得到一个 39798 x 5 的矩阵。不是吗?

d$variable 是一个字符串向量,它在每个元素中包含多个描述符,我想将它们分离到它们自己的列中(例如,aac2012.SQ001_SQ001。--> aac 2012 SQ001 SQ001)

【问题讨论】:

  • 如果没有可重复的示例,可能很难提供太多帮助。

标签: r


【解决方案1】:

rbind 函数似乎删除了列数不一致的行。 str_match_all 可以在不匹配时返回零长度向量

# How many rows had an inconsistent match-length? 39798 minus 35208 ?
sum(sapply(d1, length) != 5) 
# Show the input strings that did not produce a length 5 output vector:
d$variable[sapply(d1, length) != 5]

【讨论】:

  • 完美。正如您所怀疑的那样,某些不匹配的元素会导致不匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多