【问题标题】:How can I include a variable in a vector in R?如何在 R 的向量中包含变量?
【发布时间】:2019-08-31 06:19:29
【问题描述】:

在循环中,我想将“i”插入向量中。我该怎么做?

我尝试了以下代码:

m1nash.best.response.coordinates<- NULL
for (i in 1:2) {
  if(m1nash[1,i]>m1nash[2,i]) {
    m1nash.best.response.coordinates <- c(m1nash.best.response.coordinates, 1,i)
  } if(m1nash[2,i]>m1nash[1,i]) {
    m1nash.best.response.coordinates <- c(m1nash.best.response.coordinates, 2, i)
  }

}

遇到以下控制台:

Error: unexpected 'if' in:
"    m1nash.best.response.coordinates <- c(m1nash.best.response.coordinates, 1,i)
  } if"
>     m1nash.best.response.coordinates <- c(m1nash.best.response.coordinates, 2, i)
Error: object 'i' not found
>   }
Error: unexpected '}' in "  }"
>   
> }
Error: unexpected '}' in "}"

【问题讨论】:

  • 在 R 中,语句由换行符分隔,并且一行中只能出现一个语句(除非用分号分隔 - 但不要这样做)。因此出现错误。
  • 很好奇,如果 m1nash 会怎样?为什么只有1:2?您可能不需要任何循环。
  • 我打算在一个小例子(一个 2*2 收益矩阵)上编写这样一个使用泛化技术(循环)的代码。

标签: r loops variables


【解决方案1】:

试试这个:

m1nash.best.response.coordinates<- NULL
for (i in 1:2) {
  if (m1nash[1,i]>m1nash[2,i]) {
    m1nash.best.response.coordinates <- c(m1nash.best.response.coordinates, 1,i)
  } 
  if (m1nash[2,i]>m1nash[1,i]) {
    m1nash.best.response.coordinates <- c(m1nash.best.response.coordinates, 2, i)
  }

}

【讨论】:

    【解决方案2】:

    欢迎卡恩,

    您应该做出几个最佳实践选择,包括 for 循环还是 if 语句是最佳选择。

    但是,如果您所担心的只是让您的代码正常工作。您可以做几件事。

    我宁愿将m1nash.best.response.coordinates 初始化为空向量,而不是NULL。如果可以将其分配为c()

    其次,我相信您在if(m1nash[2,i]&gt;m1nas[1,i]) 这一行有拼写错误。 m1nas 应该是 m1nash

    你可以试试下面这个循环

    m1nash.best.response.coordinates <- c()
    m1nash <- matrix(data = rnorm(4), nrow=2, ncol=2) #my test matrix
    
    for (i in 1:2) {
      if (m1nash[1, i] > m1nash[2, i]) {
        m1nash.best.response.coordinates <-
          c(m1nash.best.response.coordinates, 1, i)
      }
      if (m1nash[2, i] > m1nash[1, i]) {
        m1nash.best.response.coordinates <-
          c(m1nash.best.response.coordinates, 2, i)
      }
    
    }
    

    如果m1nash[1,i]= m1nash[2,i],您不回答条件。如果这不可能,如果您想留在if 家族,甚至可以使用ifelse 函数。

    祝你好运

    【讨论】:

    • 在 R 中,“空向量”和NULL 几乎可以互换。使用c() 而不是NULL 进行初始化绝对不重要。
    • 我以为我编辑了拼写错误,但还是感谢您指出。我们的循环之间的唯一区别是您将第二个 if 语句放在与 } 不同的行上。当我同样修改时,代码有效。现在将关注两列相等的部分。非常感谢!
    • 是的,我认为这是一种习惯的力量,但@KonradRudolph 的换行评论一针见血。这是主要的。如果您计划为更大的矩阵或更大的循环运行类似类型的代码,则可能必须重新设计整个过程。现在,一旦您开始扩展,该代码将非常低效。祝你好运!
    • @RobeleBaker 一开始我喜欢用更小的例子来展示我的想法,然后再进行扩展。但无论如何,你似乎有道理。
    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2020-05-22
    • 2022-01-15
    • 1970-01-01
    • 2012-12-22
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多