【问题标题】:How to dynamically access r matrix row names without explicitly calling the names?如何在不显式调用名称的情况下动态访问 r 矩阵行名称?
【发布时间】:2021-11-01 03:30:30
【问题描述】:

几周前,我问了一个关于如何根据已知标准从矩阵中提取某些行的问题 (How to extract rows with similar names into a submatrix?)。收到的答案当时对应用程序非常有效,但我发现自己需要动态采样行名称并构建后续矩阵的功能,而无需明确确定要提取哪个名称。

例如,我在上一个问题中构建的模型有 6 行“族”:Intercept、actsBreaks、tBreaks 等,它们可以替换为 15 多个其他潜在的预测变量。手动更改行构造部分很麻烦,我需要避免。

我弄乱了readline(prompt=...) 让用户定义他们希望使用的预测变量系列,但被告知这是一个用户需要能够在一夜之间循环并离开的程序,所以那里没有运气。是否可以修改此代码

uniBreakLines1 <- grep("actsBreaks[0-9]*", rows)
actsBreaks <- matrix1[uniBreakLines1,drop = FALSE]

从矩阵行名称向量中采样而不确切指定使用哪个“系列”?还是我应该使用其他东西? Caret 包看起来很有前途,但我并不精通 r 语法,而且我不确定使用声称主要用于机器学习的东西是否具有此功能。这个问题 (Subsetting a matrix by row.names) 中使用矩阵索引的答案可能有潜力,但是我们不得不再次手动更改子矩阵代码。

TlDr:我需要一种方法来按名称从矩阵中过滤行,而无需输入

uniBreakLines1 <- grep("actsBreaks[0-9]*", rows)
actsBreaks <- matrix1[uniBreakLines1,drop = FALSE]

【问题讨论】:

  • 我的回答在这里有效吗stackoverflow.com/questions/68821483/…> ?
  • @TarJae 是的,但它仍然有 df1 &lt;- df %&gt;% filter(!str_detect(rownames(df), "unitBreaks")) 的显式行名调用

标签: r r-caret flexibility


【解决方案1】:

我不完全确定我理解了这个问题,但这将返回一个矩阵列表,每个类别都有一个(我认为):

res <- list()
brkcats <- unique(gsub("[0-9]*", "", rows))
for (bc in brkcats) {
      BreakLines <- grep(paste0(bc,"[0-9]*"), rows)
      res[[bc]] <- matrix1[BreakLines, , drop = FALSE]
}

【讨论】:

  • 让我编辑问题以提高可理解性。而且,这个效果很好!
猜你喜欢
  • 2011-09-28
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 2014-03-17
  • 2013-05-09
相关资源
最近更新 更多