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))
- 你应该去 n 而不是 9,使用另一个例子会使你的循环崩溃
- 从 0 到 n 有更简单的方法 ->
0:n
创建一个序列,就像 seq(0,9) (您可能已经习惯了 python 中的范围方法)
mean_vct[j] <- j
这将不起作用,因为 R 从 1 开始索引。
您有多种选择:
- 从 1:n 而不是 0:(n-1) 开始循环,如果您需要 j 进行计算,请在计算中使用 (j-1)
- 从 0:(n-1) 开始循环并使用 mean_vct[j+1]
自从我开始写这个答案后,您更改了代码,但这仍然可以解释您的问题。
我正在尝试在 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))
- 你应该去 n 而不是 9,使用另一个例子会使你的循环崩溃
- 从 0 到 n 有更简单的方法 ->
0:n
创建一个序列,就像 seq(0,9) (您可能已经习惯了 python 中的范围方法)
mean_vct[j] <- j
这将不起作用,因为 R 从 1 开始索引。
您有多种选择:
- 从 1:n 而不是 0:(n-1) 开始循环,如果您需要 j 进行计算,请在计算中使用 (j-1)
- 从 0:(n-1) 开始循环并使用 mean_vct[j+1]
自从我开始写这个答案后,您更改了代码,但这仍然可以解释您的问题。