【问题标题】:How to make a vector using a for loop如何使用 for 循环制作矢量
【发布时间】:2013-01-02 05:15:35
【问题描述】:

我对 R(和一般编程)非常陌生,几天来我一直被这个(可能非常简单)问题困住......

如何使用for 循环制作矢量3 6 12 24 48 96 192 384 768

到目前为止,我想出的只是以下几点:

x=numeric()
for (i in 1:8) (x=2*i[-1])

但是,这不起作用。我认为主要问题之一是我不明白如何按顺序索引数字。

如果有人能指出我正确的方向,那将是一个很大的帮助!

【问题讨论】:

  • 从@Arun 的建议开始:最好从x <- rep(NA,9); x[1] <- 3 开始,然后执行for 循环。最好预先分配一个正确长度的向量,而不是每次都追加一个新元素,因为如果追加,R 将需要进行大量的内部重新排列和内存分配。 (这当然只对较大的向量有影响,但是用长度为 1,000,000 的向量尝试两种方式。)
  • @Arun:当然明白。我猜你的意思是x <- 3*2^(0:8),对吧? ;-)

标签: r loops vector indexing sequence


【解决方案1】:
x=c()
x[1] = 3
for (i in 2:9) { 
    x[i]=2*x[i-1]
}

【讨论】:

    【解决方案2】:

    好的,您需要知道的第一件事是如何将内容附加到向量。你想要的功能很容易是append

    x <- c(1, 2)
    x <- append(x, 3)
    

    将使向量 x 包含 (1, 2, 3),就像您完成了 x &lt;- (1, 2, 3) 一样。接下来你需要意识到目标向量的每个成员都是之前的两倍,这在 for 循环中很容易做到

    n <- 1
    for (i in 1:8)
    {
        n <- n*2
    }
    

    将有 n 加倍每个循环。显然,您可以通过将其他语句放在 n &lt;- n*2 语句之前或之后,以加倍或尚未加倍的形式使用它。

    希望你能把这两件事放在一起来制作你想要的循环。

    【讨论】:

    • 太棒了,所有这些 cmets 真的很有帮助!非常感谢。
    • append 是一个方便的函数,但这是构建一个非常简单的向量的一种非常尴尬的方式!
    • 我完全同意,Carl,但是从他的帖子的结构来看,我认为这是一个旨在教授循环等的学习练习,而不是试图找出创建向量的最佳方法。
    【解决方案3】:

    真的,伙计们。坚持隐藏在 Arun 评论中的解决方案。

    Rgames> 3*2^(0:20)
     [1]       3       6      12      24      48      96     192     384     768
    [10]    1536    3072    6144   12288   24576   49152   98304  196608  393216
    [19]  786432 1572864 3145728
    

    【讨论】:

    • 虽然我完全同意这是创建相关向量的更好方法,但它并不能回答问题。其中,鉴于它的结构,我认为这是一个旨在教授结构使用的练习,而不是指导如何创建一般的向量。
    • @JackAidley 可能是这样,但坦率地说,循环的日子已经屈指可数了:-)。任何在教授矢量化之前教授循环的老师都不是在帮班上忙。但更重要的是,我发现在 SO 和肉类空间中,人们非常不擅长提出他们需要回答的实际问题。这可能是一项家庭作业,但也可能是一个编码新手,他可以使用一些提示来找到解决实际问题的有效方法。
    • 这是一个例子,表明处理一个向量是一个隐式的。
    【解决方案4】:

    sapply(1:9, function(i) 3*2**(i-1) )

    【讨论】:

      【解决方案5】:

      你可以,如果你知道 python 使用包 reticulate 来做这将比在 r 中容易得多(这是我做类似任务的方式)。

      如果你没有这个包然后做:

      install.packages('reticulate')
      

      如果你这样做,你可以这样做

      library('reticulate')
      
      py_run_string('vector = [n*2 for n in range(1, 9, 1)']
      #Then you can call the vector by:
      
      print(py$vector)
      
      #And do whatever you want with it.  
      

      我知道这比 r 更像是 python,而且它变得更复杂一些,但对我个人而言,我发现 python 比 r 更容易操作向量(或列表,python 等价物)。我希望这能回答你的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-06
        • 1970-01-01
        • 2017-07-22
        • 2015-05-17
        • 2012-12-10
        • 1970-01-01
        • 1970-01-01
        • 2020-02-22
        相关资源
        最近更新 更多