double for循环中的操作不起作用R.

时间:2016-07-04 12:31:58

标签: r for-loop

问题:自动对焦不是累积效应。对于矩阵元素的寻址以及比较它有什么问题......

我的数据

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)

我尝试调用我的函数

f <- 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 <- c(0)
  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
    append(AFP_vec, AFP) 
  } 
  return(AFP_vec) 
}

调用

的结果
 f(VF, VA, UV)

[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

但我希望我的AFP_vec中只有5个值。

请帮帮我。我是初学者。我无法理解错误。

2 个答案:

答案 0 :(得分:0)

仍然不完全确定你的事情,但我认为这可能是正确的。如果需要,我很乐意解释代码。

$homeUrl = $this->get('router')->generate('site_home');

答案 1 :(得分:0)

我已编辑您的代码以更正其中的错误。这应该现在有效。但提到的解决方案要好得多。

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)