我有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肯定存在。
答案 0 :(得分:5)
函数get
用于通过输入对象名称的字符串来引用对象。
在您的示例中,您将执行以下操作:
for (i in 1:10) {
x[i] <- length(get(paste0("Vector",i+1))) - length(get(paste0("Vector",i)))
}
答案 1 :(得分:4)
我会将它们放在一个列表中并使用sapply
,length
和diff
的组合:
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