为什么间隔长度为1时R列间隔切片不起作用?

问题描述 投票:2回答:1

我昨天运行了一些代码,其中涉及将矩阵切成列的间隔。也就是说,给定一个nxp矩阵A和一系列断点,我使用for循环对A进行了切片。第一部分是A [,1:break_points [1]]。第二部分是A [,break_points [1] +1:break_points [2]]。第三部分是A [,break_points [2] +1:break_points [3]]等。

[不幸的是,执行失败。经过一番挖掘,我发现了问题的根源:列间隔之一是长度1。事实证明,A [,3679:3679]不能按预期工作。更具体地说,

A0 <- A[,3679:3680]
ncol(A0)
> 2

但是

A0 <- A[,3679:3679]
ncol(A0)
> NULL

我知道如何解决这个问题:对于break_points [i + 1]-break_points [i] = 1的情况,只需创建一个if-else例外。但是我很好奇,为什么R在第一名。

r matrix slice
1个回答
0
投票

[子矩阵分组时,默认情况下R将长度为1的切片转换为向量。为避免这种情况,您必须或应该添加参数drop = FALSE,例如A[ ,3679:3679, drop = FALSE]将为您提供一个单列矩阵,而不是一个向量。可以在Hadley Wickham的书Advanced R中找到有关简单保留和保留子集的讨论。

© www.soinside.com 2019 - 2024. All rights reserved.