我必须创建一个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个。为什么?
答案 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