我想创建一个循环,将变量增加0.1并将其写入变量。 从0.10到1.每0.10跳跃
x <- c(1:10)
for (i in x)
{
a = 0.1
y <- a+0.1
print(y)
}
答案 0 :(得分:0)
您应该使用seq功能(请查看文档链接)
number_sequence = seq(0.1,1,0.1)
for (i in number_sequence)
{
print(i)
}
在seq(from,to,by)
我们有
from,to:序列的起始值和(最大值)结束值。的 长度为1,除非仅作为未命名的参数提供。
by:number,increment of sequence。
答案 1 :(得分:0)
您错误地构建了loop
。
构建loop
时,for
部分需要包含3个参数:计数器(i),起始索引(:
之前的数字),结束索引(数字)在:
之后。在{}
之间出现了什么功能/调整/等等。你想做什么。
loop
的一些可能变体如下:
y <- 0
jumpBy <- 0.1
for (i in 1:10) {
y <- y + jumpBy
print(y)
}
或者像这样,使用seq_along()
函数(一般来说,使用seq_along()
被认为比在此上下文中使用seq()
更好):
x <- 1:10
y <- 0
jumpBy <- 0.1
for (i in seq_along(x)) {
y <- y + jumpBy
print(y)
}
然而,你应该像@Mislav说的那样:
y <- seq(0, 1, by = 0.1)
使用seq()
的原因及其相对于loop
的变化是因为它耗费的时间更少,资源更少,并且错误的可能性更低。
例如,如果我们对loop
和seq()
进行基准测试,我们可以看到使用seq()
比使用loop
快3(或5)倍}:
rbenchmark::benchmark(
"for_loop" = {
dy <- 0
jumpBy <- 0.1
for (i in 1:10) {
y <- y + jumpBy
} },
"for_loop_seq_along" = {
x <- 1:10
y <- 0
jumpBy <- 0.1
for (i in seq_along(x)) {
y <- y + jumpBy
}},
"Seq" = {
y <- seq(0, 1, by = 0.1)
},
replications = 1000,
columns = c(
"test", "replications", "elapsed"))
test replications elapsed
1 for_loop 1000 3.22
2 for_loop_seq_along 1000 5.00
3 Seq 1000 0.07