如何使用for循环制作向量

时间:2013-01-18 13:22:06

标签: r loops vector indexing sequence

我对R(以及一般的编程)非常陌生,并且我已经坚持这个(可能非常简单)问题几天......

如何使用3 6 12 24 48 96 192 384 768循环生成向量for

到目前为止,我设法提出的所有内容都是:

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

然而,这不起作用。我认为其中一个主要问题是我不明白如何索引序列中的数字。

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

5 个答案:

答案 0 :(得分:17)

好的,你需要知道的第一件事是如何将东西附加到矢量。您想要的功能很简单append

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

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

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

每次循环都会加倍。显然,您可以通过在n <- n*2语句之前或之后放置其他语句,将其用于加倍或未加倍的形式。

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

答案 1 :(得分:15)

x=c()
x[1] = 3
for (i in 2:9) { 
    x[i]=2*x[i-1]
}

答案 2 :(得分: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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果您知道python,则可以使用网状软件包来完成此操作,这比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在操纵向量(或列表,等效于python)方面比r更容易。我希望这能回答您的问题。