MATLAB到R转换:通过for循环

时间:2016-03-29 10:59:54

标签: r matlab

我有以下代码。这段代码最初是在MATLAB中编写的。我在这里有两个问题:

1)对于MATLAB中的以下命令,R中的相应命令是什么:

   duet(i).p = [];    

2)在下面的代码中,我得到duet$n的所有正确的6个值,但我没有得到duet$p的正确值。我的问题是如何通过for循环迭代将值附加到R中的空现有数组duet$p[i]

此行在以下代码中无效:

duet$p[i] <- c(duet$p[i],j) 

我可能也错误地声明了duet$p[i] <- array()

MATLAB中duet.nduet.p的值为:

duet.n 
    2 0 2 0 1 3

duet.p 
    [] [3,6] [] [1,3,5,6] [1,6] [] 

在R中,我正确地获得duet$n个值,但我无法获得duet$p的数组结果。

获得duet$p值的任何帮助都将不胜感激。

x <- matrix(c(-1,2,4,1,7,4.2,3,0,1.2,-1.2,5.1,4,2,3.1,1.1,1,1,9,0,1,2,2,8,1,2,2,2,2,2,2),nrow=6,ncol=5,byrow=T)  
fro=1;N=6;M=2;V=3;
F <- list(f=c())
duet = list()
for (i = 1 : N){
duet$n[i] = 0
duet$p[i] = array()  ## Create an empty array
       for (j in 1 : N){
          dl = 0
          de = 0
          dm = 0
             for (k = 1 : M){
                 if (x[i,V + k] < x[j,V + k]){
                      dl = dl + 1
                 } else if (x[i,V + k] == x[j,V + k]){
                      de = de + 1
                 } else{
                      dm = dm + 1
             }
       }
    if (dl == 0 & de != M){
        duet$n[i] = duet$n[i] + 1
    } else if (dm == 0 & de != M){
        duet$p[i] = c(duet$p[i],j)
    }
}   
if (duet$n[i] == 0){
    x[i,6] = 1
    F$f = c(F$f,i)
}
}

2 个答案:

答案 0 :(得分:1)

这似乎可以获得您想要的输出:

x <- matrix(c(-1,2,4,1,7,4.2,3,0,1.2,-1.2,5.1,4,2,3.1,1.1,1,1,9,0,1,2,2,8,1,2,2,2,2,2,2),nrow=6,ncol=5,byrow=T)  
fro=1;N=6;M=2;V=3;
F <- list(f=c())
duet = list(n=rep(0,N), p=lapply(1:N, function(x)c()))
for (i in 1 : N){
  duet$n[i] = 0
  #duet$p[[i]] = c()  ## Create an empty array
  #if(i==2) browser()
  for (j in 1 : N){
    k=1:M
    dl <- sum(x[i,V + k] < x[j,V + k])
    de <- sum(x[i,V + k] == x[j,V + k])
    dm <- sum(x[i,V + k] > x[j,V + k])

    if (dl == 0 & de != M){
      duet$n[i] = duet$n[i] + 1
    } else if (dm == 0 & de != M){
      duet$p[[i]] = c(duet$p[[i]],j)
    }
  }   
  if (duet$n[i] == 0){
    #x[i,6] = 1
    F$f = c(F$f,i)
  }
}

我做了什么?

  • 注明了x[i,6] =1行,因为没有x[i,6],我不确定你的意思。 您需要对此进行排序。
  • 初始化二重奏$ n作为向量
  • 初始化二重唱$ p作为n空矢量列表
  • 删除了k循环,因为R中的条件计数可以作为条件为TRUE的元素之和来完成。
  • 更正了for循环的语法:=变为in

答案 1 :(得分:-1)

我认为您正在尝试duet[i]$p而不是您正在做的事情。您还需要将每个单元格初始化为列表