R中的逻辑下标太长

YCT*_*YCT 2 r

这可能是一个简单的问题,但有人可以解释为什么下面的第三行代码会产生“逻辑下标太长”的错误?第 2 行和第 3 行代码有什么区别?谢谢!

try2 <- matrix(1 : 50, nrow = 10, byrow = TRUE)

try2[try2 < 10] <- 0

try2[try2 < 10,] <- 0
Run Code Online (Sandbox Code Playgroud)

the*_*ail 5

Amatrix只是vector具有一些维度作为属性的 a 。即,try2真的只是1:50有一些额外的细节:

str(try2)
# int [1:10, 1:5] 1 6 11 16 21 26 31 36 41 46 ...
Run Code Online (Sandbox Code Playgroud)

类似地,应用的逻辑函数try2只有 50 个 TRUE 或 FALSE 值,具有某些维度:

str(try2 < 10)
# logi [1:10, 1:5] TRUE TRUE FALSE FALSE FALSE FALSE ...
Run Code Online (Sandbox Code Playgroud)

所以

try2[try2 < 10] <- 0
Run Code Online (Sandbox Code Playgroud)

完全没问题,因为您有 50 个值,由 50 个值索引。一切都符合预期。

另一方面,

try2[try2 < 10,] <- 0
Run Code Online (Sandbox Code Playgroud)

要求:

try2[rowselection, columnselection]
Run Code Online (Sandbox Code Playgroud)

不幸的是,您只有 10 行,但您正在尝试对这 10 行使用 50 个值的索引。50 太长而无法放入 10,因此:

try2[try2 < 10, ] 中的错误:(下标)逻辑下标太长

  • 感谢您的澄清!这非常有帮助! (2认同)