代码之家  ›  专栏  ›  技术社区  ›  dasf

R:保留1行/列矩阵[重复]

  •  4
  • dasf  · 技术社区  · 6 年前

    给定一个包含一行、一列或一个单元格的矩阵,我需要在保持矩阵结构的同时对行重新排序。我试着加上 drop=F 但没用!我做了什么?

    test = matrix(letters[1:5]) # is a matrix
    test[5:1,,drop=F]           # not a matrix
    
    test2 = matrix(letters[1:5],nrow=1) # is a matrix
    test2[1:1,,drop=F]                  # not a matrix
    
    test3 = matrix(1)  # is a matrix
    test3[1:1,,drop=F] # not a matrix
    
    3 回复  |  直到 6 年前
        1
  •  6
  •   Aaron left Stack Overflow    6 年前

    我猜是被改写了 F ; f 可以设置为变量,在这种情况下不再为false。总是写出来 FALSE 完全不能设置为变量。

    Is there anything wrong with using T & F instead of TRUE & FALSE?

    R Inferno 第8.1.32节是一个很好的参考。

    > F <- 1
    > test = matrix(letters[1:5]) # is a matrix
    > test[5:1,,drop=F]           # not a matrix
    [1] "e" "d" "c" "b" "a"
    > test[5:1,,drop=FALSE]       # but this is a matrix
         [,1]
    [1,] "e" 
    [2,] "d" 
    [3,] "c" 
    [4,] "b" 
    [5,] "a" 
    > rm(F)
    > test[5:1,,drop=F]           # now a matrix again
         [,1]
    [1,] "e" 
    [2,] "d" 
    [3,] "c" 
    [4,] "b" 
    [5,] "a" 
    
        2
  •  2
  •   Gregor Thomas    6 年前

    你问题中的代码在新的R会话中运行良好:

    test = matrix(letters[1:5]) # is a matrix
    result = test[5:1,,drop=F]  
    result
    #      [,1]
    # [1,] "e" 
    # [2,] "d" 
    # [3,] "c" 
    # [4,] "b" 
    # [5,] "a" 
    class(result)  # still a matrix
    # [1] "matrix"
    dim(result)
    # [1] 5 1
    

    即使在1x1矩阵上:

    test3 = matrix(1)  # is a matrix
    result3 = test3[1:1,,drop=F]
    class(result3)
    # [1] "matrix"
    dim(result3)
    # [1] 1 1
    

    也许您已经加载了其他覆盖默认行为的包?是什么让你认为你没有一个矩阵?

        3
  •  0
  •   DTYK    6 年前

    以下工作:

    test <- matrix(test[5:1,, drop = F], nrow = 5, ncol = 1)
    

    当你使用 is.matrix 为了测试它,输出是一个矩阵。同时,指定行数( nrow )以及列数( ncol )将其强制为所需的行数和列数。