我有以下代码。这段代码最初是在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.n
和duet.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)
}
}
答案 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
空矢量列表k
循环,因为R中的条件计数可以作为条件为TRUE
的元素之和来完成。=
变为in
答案 1 :(得分:-1)
我认为您正在尝试duet[i]$p
而不是您正在做的事情。您还需要将每个单元格初始化为列表