Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 通过切换1和0局部搜索获得矩阵_R - Fatal编程技术网

R 通过切换1和0局部搜索获得矩阵

R 通过切换1和0局部搜索获得矩阵,r,R,让我们从下面的矩阵开始 M <- matrix(c(0,0,0,1,0,0,1,1, 0,0,1,0,0,1,1,0, 0,0,0,0,0,1,1,1, 0,0,0,1,1,0,1,0, 0,0,0,1,1,1,0,0, 0,0,1,0,1,0,0,1),nrow = 8,ncol = 6) [,1] [,2] [,3] [,4] [,5] [,6] [1,] 0

让我们从下面的矩阵开始

M <- matrix(c(0,0,0,1,0,0,1,1,
          0,0,1,0,0,1,1,0,
          0,0,0,0,0,1,1,1,
          0,0,0,1,1,0,1,0,
          0,0,0,1,1,1,0,0,
          0,0,1,0,1,0,0,1),nrow = 8,ncol = 6)


      [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    0    0    0    0    0    0
[2,]    0    0    0    0    0    0
[3,]    0    1    0    0    0    1
[4,]    1    0    0    1    1    0
[5,]    0    0    0    1    1    1
[6,]    0    1    1    0    1    0
[7,]    1    1    1    1    0    0
[8,]    1    0    1    0    0    1

M这里有一个解决方案。你可以把整个事情包装成一个函数。它生成一个矩阵列表,
results
,其中
results[[i]]
是一个矩阵列表,其第
i
列已切换

    column_switcher = function(x) {
        ones = which(x == 1)
        zeros = which(x == 0)
        results = matrix(rep(x, length(ones) * length(zeros)), nrow = length(x))
        counter = 1
        for (one in ones) {
            for (zero in zeros) {
                results[one, counter] = 0
                results[zero, counter] = 1
                counter = counter + 1
            }
        }
        return(results)
    }

    switched = lapply(1:ncol(M), function(col) column_switcher(M[, col]))
    results = lapply(seq_along(switched), function(m_col) {
        lapply(1:ncol(switched[[m_col]]), function(i) {
            M[, m_col] = switched[[m_col]][, i]
            return(M)
            })
        })

    results[[1]]
    # [[1]]
    #      [,1] [,2] [,3] [,4] [,5] [,6]
    # [1,]    1    0    0    0    0    0
    # [2,]    0    0    0    0    0    0
    # [3,]    0    1    0    0    0    1
    # [4,]    0    0    0    1    1    0
    # [5,]    0    0    0    1    1    1
    # [6,]    0    1    1    0    1    0
    # [7,]    1    1    1    1    0    0
    # [8,]    1    0    1    0    0    1
    # 
    # [[2]]
    #      [,1] [,2] [,3] [,4] [,5] [,6]
    # [1,]    0    0    0    0    0    0
    # [2,]    1    0    0    0    0    0
    # [3,]    0    1    0    0    0    1
    # [4,]    0    0    0    1    1    0
    # [5,]    0    0    0    1    1    1
    # [6,]    0    1    1    0    1    0
    # [7,]    1    1    1    1    0    0
    # [8,]    1    0    1    0    0    1
    # 
    # ...
检查列表的长度和子列表的长度,它们都在那里

    length(results)
    # [1] 6
    lengths(results)
    # [1] 15 15 15 15 15 15

仔细检查,是否要交换第1列(第1-6行)中的1和0,然后将同一列交换给后面的行,然后分别交换给每一列?看起来您的最终目标是同时交换所有1和0。同时交换所有1和0的一种快速方法是:M@MatthewBorg,我想对单个列执行。我只需为
循环编写一个(嵌套的)
。。。逻辑似乎很简单
for(其中一个(x==1)){for(其中零个(x==0)){…}
。把它放在一个对单个列进行操作的函数中,然后你可以
将该函数应用到每一列。@Gregor我不知道该怎么做。