使用`ifelse`返回一个矩阵

7

我有两个矩阵:

mat <- matrix(1:6, 2, 3)
mat2 <- matrix(1:2, 2, 3)

和一个参数

a <- 1

使用ifelse,当a等于某个值时能否返回一个矩阵? 我正在使用的代码不起作用。例如:

mat.new <- ifelse(a == 1, mat, mat2)
1个回答

13

返回的长度完全由 length(a == 1) 决定。请参阅带有 ?ifelse 的帮助文件。您的代码仅返回单个值。

ifelse 目标向量输入 / 输出。即使您正确得到了长度,比如:ifelse(rep(TRUE, 6), mat, mat2),您也会得到一个向量而不是矩阵输出。因此,需要使用外部的 matrix 调用来重新设置维度。


提示 1:

对于您的示例,看起来简单的 result <- if (a == 1) mat else mat2 就足够了。不需要触及 ifelse

提示 2:

要求 ifelse 返回矩阵并不是不可能,但必须用列表保护它(请记住列表是向量):

ifelse(TRUE, list(mat), list(mat2))

但是,这很不方便。


2
@zx8754 小贴士2,它实际上完美地解决了问题。 我举的例子是我手头工作的一个(非常)简化版本。我需要从5个矩阵中选择一个,这取决于“a”的值。因此,小贴士2,点赞! - Rui
@Rui 那我会把所有的矩阵都放在一个列表里,然后通过 myList <- list(mat, mat2, mat3, etc); mat.new <- myList[[a]] 进行访问。 - zx8754

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接