0

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

例如,我在上一个问题中建立的模型有 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]
4

1 回答 1

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]
}
于 2021-09-02T17:39:57.923 回答