20

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

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

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

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

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

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

4

5 回答 5

20
x=c()
x[1] = 3
for (i in 2:9) { 
    x[i]=2*x[i-1]
}
于 2013-01-18T14:29:50.873 回答
20

好的,您需要知道的第一件事是如何将内容附加到向量。您想要的功能很容易是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 <- n*2

希望您可以将这两件事放在一起来制作您想要的循环。

于 2013-01-18T13:39:41.707 回答
5

真的,伙计们。坚持隐藏在 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
于 2013-01-18T15:41:37.867 回答
0

你可以,如果你知道 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 等价物)。我希望这能回答你的问题。

于 2020-09-14T13:23:13.073 回答
0

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

于 2019-12-30T23:03:09.993 回答