R 中的循环和填充空向量

问题描述 投票:0回答:2

我正在寻找填充这个空向量:

empty_vec <- rep("", times=length(number_vec))

此循环中的连续数字:

for (numbers in number_vec) {   
  sqrtn <- sqrt(numbers)
  empty_vec[numbers] <- sqrtn
}

其中

numbers_vec
c(16:49)

但是,当我这样做时,我的

empty_vec
中的第一个位置(1-15)没有被填充?

r loops vector
2个回答
3
投票

您可以通过两种方式解决这个问题:

首先,您可以创建一个计数器,它将记录您处于循环的哪一步,并将其用作

empty_vect
的索引,如下所示:

empty_vec <- rep("", times=length(number_vec))
counter <- 0
for (numbers in number_vec) {   
  counter <- counter + 1
  sqrtn <- sqrt(numbers)
  empty_vec[counter] <- sqrtn
}

或者您可以创建一个空向量并连接每个新值,如下所示:

empty_vec <- c()
for (numbers in number_vec) {   
  sqrtn <- sqrt(numbers)
  empty_vec <- c(empty_vec, sqrtn)
}

你这样做的方式,就像你开始在第 16 个位置填充你的向量,这就是你出错的方式。


0
投票

首先你需要了解 for 循环是如何工作的

for 循环的一般表达是

for(var in seq) expr
    var =  A syntactical name for a variable
    seq =  An expression evaluating to a vector (including a list and an expression) or to a pairlist or NULL. A factor value will be coerced to a character vector.

所以请注意,“seq”将是“var”的值。

在你的例子中,你写了

for (numbers in number_vec)
where,
     numbers = Name of the variable
     number_vec = c(16:49)

所以在这里,“numbers”的初始值将是“number_vec”的第一个值,即 16。

在循环的后面步骤中,表达式

empty_vec[numbers]<-sqrt
where , 
    empty_vec[numbers] indicate the 16th position of the  empty_vec as initially numbers started with value 16

当您从第 16 个位置开始时,之前的 15 个位置仍为空。

您问题的可能解决方案:

number_vec = c(16:49)
empty_vec <- rep("", times=length(number_vec))

for (numbers in seq_along(number_vec)) {   
  sqrt<-sqrt(number_vec[numbers])
  empty_vec[numbers]<-sqrt
}
© www.soinside.com 2019 - 2024. All rights reserved.