R:在循环中创建 seq(0,9) 的问题

R : Problems in creating a seq(0,9) in a loop

我正在尝试在 R 中编写一个函数,但我正在努力解决序列问题:

vincent <- function(v,n, val_min){
  # v = vector to vincentize n = number of bin +1 
  mean_vct <- array(0, n) # n = nb de bins; crée un vecteur de 5 zéros si n = 5
  vsort <- sort(v)
  vsort <- sort(subset(vsort, vsort>= val_min))
  for (j in seq(1,n) ){
    mean_vct[j] <- (val_inf(j,vsort,n) + val_inter(j,vsort,n) + val_sup(j,vsort,n))
    mean_vct[j] <- mean_vct[j]/(length(vsort)/(n))
   }
  return (mean_vct)
}

当应用此代码打印序列时,我得到: 1 2 3 4 5 6 7 8 9 0 而不是 0 1 2 3 4 5 6 7 8 9 我需要这个序列以 0 开头,因为我正在将代码从 Python 转换为 R.

谢谢

编辑:应用此功能的示例:

RT <- 1:100
vincent(RT, 10, 0)

值得注意的是,array 确实适用于多维数组。您可以使用 mean_vct <- numeric(9).

启动 mean_vct

主要问题是您无法分配给 mean_vct[0],因为向量索引始终从 1 开始。mean_vct[10] 包含 0 的原因是您使用 0 启动它。您如果你真的想通过从 0 开始的索引来引用你的向量,可以使用字符索引,但这可能会造成混淆。

最后,这种事情通常用 R 中的矢量化代码做得更好。例如

mean_vct <- 0:9

如果需要:

names(mean_vct) <- 0:9

您的代码存在几个问题。

vincent <- function(v,n){
  # v = vector to vincentize n = number of bin
  mean_vct <- array(0, n)
  vsort <- sort(v) #Tri dans l'ordre les TR
  for (j in seq(0,9)){ #pour chaque bin
    mean_vct[j] <- j
  }
  return (mean_vct)
}

for (j in seq(0, 9))

  1. 你应该去 n 而不是 9,使用另一个例子会使你的循环崩溃
  2. 从 0 到 n 有更简单的方法 -> 0:n 创建一个序列,就像 seq(0,9) (您可能已经习惯了 python 中的范围方法)

mean_vct[j] <- j

这将不起作用,因为 R 从 1 开始索引。

您有多种选择:

  1. 从 1:n 而不是 0:(n-1) 开始循环,如果您需要 j 进行计算,请在计算中使用 (j-1)
  2. 从 0:(n-1) 开始循环并使用 mean_vct[j+1]

自从我开始写这个答案后,您更改了代码,但这仍然可以解释您的问题。