R 如何将序列写成向量?
我有一个向量“I”,我们可以拿它为例,直到未知长度。我想创建一个向量,使x^(I-1)看起来像(0,x,x^2…)。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)
但是,我不知道如何编写这段代码,我尝试(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仍然超过13000xseq
…顺便说一句:我将其增加到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