Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.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
双for循环中的操作不';不工作_R_For Loop - Fatal编程技术网

双for循环中的操作不';不工作

双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,

问题是: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, 
               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)