如何将for循环中的“i”“附加”到R中的向量名称

时间:2014-02-20 18:43:09

标签: r

我有40个向量,每个向量包含一堆数字。我想按顺序区分任意2个向量的长度:

length(Vector2) - length(Vector1)

然后是vector3 - vector2等......

如何构造一个for循环,以便“i”附加到向量的名称,以便我可以遍历这些差异?

像:

for (i in 1:10) {

  x[i] <-   length(Vector(i+1)) - length(Vector(i))

}

但显然将“i”放在括号内是不正确的。

谢谢,


使用以下几乎就是:

for (i in 1:10) {
   p[i] <- length(get(paste0("KWvectorW", i+1, "$idKeyword"))) - length(get(paste0("KWvectorW", i, "$idKeyword")))
             }

似乎正确地将向量的名称拼凑在一起....但是我得到以下错误:

get中的错误(paste0(“KWvectorW”,i + 1,“$ idKeyword”)):   找不到对象'KWvectorW2 $ idKeyword'

但对象KWvectorW2 $ idKeyword肯定存在。

2 个答案:

答案 0 :(得分:5)

函数get用于通过输入对象名称的字符串来引用对象。

在您的示例中,您将执行以下操作:

for (i in 1:10) {

  x[i] <-   length(get(paste0("Vector",i+1))) - length(get(paste0("Vector",i)))

}

答案 1 :(得分:4)

我会将它们放在一个列表中并使用sapplylengthdiff的组合:

vec_list = lapply(1:100, function(x) runif(round(runif(1, 1, 100))))
vec_lengths = sapply(vec_list, length)
vec_lengths
  [1]  4 49  7 30 36 35 96  7 38 46 33 25 54 13 68 84 32 56 25 41 41 64 93 81 10
 [26] 91  4 53 34 62 21 12 88 94 71 67 42 39 40 59 10 59 37 19  9 78 46 96 20 68
 [51] 54 54 46 49 12 15 77 91 81 34 21 30 25 56  4 50 35 27 62 49 94 61 59 37 36
 [76] 30 23  2 22 17 16 44 88 41  6 44 62 13 48 57 12 35 84 46 45 10 99 69 50 75
diff(vec_lengths)
 [1]  45 -42  23   6  -1  61 -89  31   8 -13  -8  29 -41  55  16 -52  24 -31  16
[20]   0  23  29 -12 -71  81 -87  49 -19  28 -41  -9  76   6 -23  -4 -25  -3   1
[39]  19 -49  49 -22 -18 -10  69 -32  50 -76  48 -14   0  -8   3 -37   3  62  14
[58] -10 -47 -13   9  -5  31 -52  46 -15  -8  35 -13  45 -33  -2 -22  -1  -6  -7
[77] -21  20  -5  -1  28  44 -47 -35  38  18 -49  35   9 -45  23  49 -38  -1 -35
[96]  89 -30 -19  25