为什么R在我的向量中添加了额外的元素?

时间:2016-01-21 01:47:41

标签: r for-loop

我必须创建一个for循环,它接受向量z1,对它进行平方,然后用这些向量创建向量z2(是的,我知道有一个向量化,但这是一个作业问题)。我已经把所有东西都弄下来了,除了某些原因它会在一个尾随元素上添加到所述向量中。

z1 <- c(1, 8, 19, 17, 65, 103, 48, 17, 23, 34)

# Sort z1 in descending order
z1 <- sort(z1, decreasing = TRUE)

# Create empty vector z2
z2 <- c()

for (i in 1:10){
 z2[i] <- z1[i]*z1[i]
 z2 <- c(z2,z2[i])
}

print(z2)

这里是它打印的矢量

[1] 10609  4225  2304  1156   529   361   289   289    64     1     1

如果你注意到它有11个元素,而我的原始z1矢量只有10个。为什么?

1 个答案:

答案 0 :(得分:3)

第一点:您可以使用向量化的^原语函数在没有循环的情况下执行此操作。

z1 ^ 2
# [1] 10609  4225  2304  1156   529   361   289   289    64     1

但是这是你的代码中发生的事情。基本上你需要删除行

z2 <- c(z2, z2[i])

因为在上一行中您已完成z2向量的分配,最后一次运行c(z2[1:10], z2[10])。如果您想继续使用循环,只需删除该行。

## note the difference in initializing z2
## memory allocation is more efficient than building in the loop
z2 <- vector(typeof(z1), length(z1))

for (i in seq_along(z2)) {
    z2[i] <- z1[i]*z1[i]
}

然后我们

z2
# [1] 10609  4225  2304  1156   529   361   289   289    64     1