R 如何将序列写成向量?

R 如何将序列写成向量?,r,R,我有一个向量“I”,我们可以拿它为例,直到未知长度。我想创建一个向量,使x^(I-1)看起来像(0,x,x^2…)。 但是,我不知道如何编写这段代码,我尝试(x^I-1)单独使用也不起作用 正如您对问题的评论,R是矢量化的。这意味着您可以指定整数的向量y,长度为1的变量x,然后通过x^y将x取为y的幂: y <- 0:10 x <- 2 x^y 编辑***阅读r2evan的评论,了解为什么这不是推荐的解决方案 这将获取向量z并将其输入函数以创建结果向量。只需调整x值(在本例中为2)

我有一个向量“I”,我们可以拿它为例,直到未知长度。我想创建一个向量,使x^(I-1)看起来像(0,x,x^2…)。
但是,我不知道如何编写这段代码,我尝试(x^I-1)单独使用也不起作用

正如您对问题的评论,R是矢量化的。这意味着您可以指定整数的向量
y
,长度为1的变量
x
,然后通过
x^y
x
取为
y
的幂:

y <- 0:10
x <- 2
x^y

编辑***阅读r2evan的评论,了解为什么这不是推荐的解决方案

这将获取向量z并将其输入函数以创建结果向量。只需调整x值(在本例中为2)

z您可以使用
seq(l)
构造一个
l
长度向量,从
1
l
作为幂。由于您要从
0
开始,因此可以使用
seq(l)-1

然后,选择一个值
x
,并通过

x**(seq(l)-1)
如果将
x
l
作为变量,则可以如下所示定义自定义序列生成器

vgen <- function(x,l)  x**(seq(l)-1)

R在大多数操作中都是矢量化的,因此,如果x是2,并且需要增加到20个序列,您可以使用
seq(from,to,by)
(使用其他形式)或
from:to
(例如
0:20
)的不太灵活的简洁版本,只需执行(例如)
2^(0:20)
。一旦你有了这个向量,正如@CalumYou所说,你可以将它提高到一个幂(
x)来表示你的尝试到底“不起作用”。请展示你尝试过的代码。如果你提供了一个你可以自己查看的向量,你会更容易得到帮助,如果你想……如果你已经安装了
microbenchmark
,那么
microbenchmark::microbenchmark(a=0:100,b=seq(0100))
。如果不是,那么
系统时间不会给你你想要的精度。但是不,
seq(0100)
需要大约35倍的时间(中位数)当与
0:100
相比时执行。诚然,这些都是纳秒级的度量,因此my仍然超过13000x
seq
…顺便说一句:我将其增加到
0:1000000
,大约快了7倍(中位数)比
seq
。这要视情况而定。虽然这是可行的,但这并不是R的惯用方法,尽可能将其作为向量来处理。例如,如果我们使用
0:100
将其与向量化进行比较,向量化版本的执行时间将超过10倍。当然,有时向量化数学无法完成,这不是其中之一。(不是批评正确性,只是就效率和R习惯性提出建议。)
x**(seq(l)-1)
vgen <- function(x,l)  x**(seq(l)-1)
> vgen(3,7)
[1]   1   3   9  27  81 243 729