如何在不显式调用名称的情况下动态访问 r 矩阵行名称?

How to dynamically access r matrix row names without explicitly calling the names?

几周前,我问了一个关于如何根据已知条件从矩阵中提取特定行的问题 ()。当时收到的答案对应用程序来说非常有效,但我发现自己需要动态采样行名称并构建后续矩阵的功能,而不必明确确定要提取的名称。

例如,我在上一个问题中构建的模型有 6 行“系列”:Intercept、actBreaks、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]

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

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]
}