双for循环中的操作不';不工作
问题是:AF不是积云。对矩阵元素的寻址和比较是有问题的 我的数据双for循环中的操作不';不工作,r,for-loop,R,For Loop,问题是:AF不是积云。对矩阵元素的寻址和比较是有问题的 我的数据 VF <- matrix(c(40, 70, 80, 35, 90, 66, 15, 46, 50, 52, 60, 80, 30, 73, 30, 40, 80, 70, 76, 69), nrow = 5, byrow = TRUE) VA <- matrix(c(40, 25, 67, 43,
VF <- matrix(c(40, 70, 80, 35,
90, 66, 15, 46,
50, 52, 60, 80,
30, 73, 30, 40,
80, 70, 76, 69), nrow = 5, byrow = TRUE)
VA <- matrix(c(40, 25, 67, 43,
5, 26, 80, 43,
45, 35, 30, 10,
63, 13, 60, 45,
10, 19, 11, 22), nrow = 5, byrow = TRUE)
UV <- c(1, 0, 0, 1)
是
但我希望在我的AFP_vec中只有5个值
请帮帮我。我是初学者。我不明白出了什么问题。仍然不能完全确定你的想法,但我认为这可能是正确的。如果需要,我很乐意解释代码
VF <- matrix(
c(40 , 70 , 80 ,35,
90 , 66 , 15 , 46,
50 , 52 , 60 , 80,
30 , 73 , 30 , 40,
80 , 70 , 76 , 69) , nrow = 5 , byrow = T
)
VA <- matrix(
c(40, 25, 67 , 43,
5, 26 , 80 , 43,
45 , 35 , 30 , 10 ,
63 , 13, 60 , 45,
10 , 19 , 11, 22 ), nrow = 5 , byrow = T
)
UV <- c( 1, 0, 0, 1)
mat <- (t(VF) * UV ) + (t(VA) * ! UV )
apply( mat , 2 , mean)
VF我已经编辑了您的代码以更正其中的错误。现在应该可以了。但上述解决方案要好得多
fun<-function(VF,VA,UV)
{
vote_for<-VF
vote_against<-VA
user_vote<-UV
am_law<-ncol(vote_for)
am_fr<-nrow(vote_for)
AF<-0
AFP_vec<-list()
for (i in 1:am_fr)
{
AF<-0
for (j in 1:am_law)
{
if (user_vote[j] == 1){ AF=AF+vote_for[i,j]}
else { AF=AF+vote_against[i,j] }
}
AFP<-AF / am_law
AFP_vec[i]=AFP
}
return(AFP_vec) }
res=fun(VF,VA,UV)
funHey,请你澄清一下你期望的输出是什么样子的。根据UV中的值,我从矩阵投票赞成或反对中选择元素,并将它们累加起来。(我希望AF是我的累积变量)。然后我计算一组元素中的平均值(通过“for(i in 1:am_fr)”循环中的一个步骤)-AFP并推入向量AFP_vec。根据我的数据,AFP_vec必须给我5个值。我目前的理解是,输出应该是一个向量,其长度与VF&VA的行数相同,其中元素的值是VF&VA中行的平均值,如果UV=1,则取VF,如果UV=0,则取VA?是的。对于第一次通过“For(i in 1:am_fr)”-循环:AF=40+25+67+35=167;AFP=41.75;法新社的第一个el是41.75。非常感谢!看起来好多了:)不需要解释你的代码,谷歌帮了我。当然没有你想的那么多),但是你能解释一下为什么我的函数不起作用吗?这将是一次很好的经历。我不仅想知道正确的决定,还想知道我的错误。哦,奇拉尤·查莫利已经回答了。这样我就能知道出了什么问题。非常感谢。如果您对答案感到满意,您有没有可能标记为已回答@切特
[1] 40 [1] NA [1] NA [1] NA [1] 90 [1] NA [1] NA [1] NA [1] 50
[1] NA [1] NA [1] NA [1] 30 [1] NA [1] NA [1] NA [1] 80 [1] NA [1] NA [1] NA [1] 0
VF <- matrix(
c(40 , 70 , 80 ,35,
90 , 66 , 15 , 46,
50 , 52 , 60 , 80,
30 , 73 , 30 , 40,
80 , 70 , 76 , 69) , nrow = 5 , byrow = T
)
VA <- matrix(
c(40, 25, 67 , 43,
5, 26 , 80 , 43,
45 , 35 , 30 , 10 ,
63 , 13, 60 , 45,
10 , 19 , 11, 22 ), nrow = 5 , byrow = T
)
UV <- c( 1, 0, 0, 1)
mat <- (t(VF) * UV ) + (t(VA) * ! UV )
apply( mat , 2 , mean)
fun<-function(VF,VA,UV)
{
vote_for<-VF
vote_against<-VA
user_vote<-UV
am_law<-ncol(vote_for)
am_fr<-nrow(vote_for)
AF<-0
AFP_vec<-list()
for (i in 1:am_fr)
{
AF<-0
for (j in 1:am_law)
{
if (user_vote[j] == 1){ AF=AF+vote_for[i,j]}
else { AF=AF+vote_against[i,j] }
}
AFP<-AF / am_law
AFP_vec[i]=AFP
}
return(AFP_vec) }
res=fun(VF,VA,UV)