循环R中的向量

时间:2016-10-13 16:06:16

标签: r loops generics vector

我正在尝试优化下面的代码

lv1=length(new.variable1.v)
lv2=length(new.variable2.v)
lv3=length(new.variable3.v)
lv4=length(new.variable4.v)
lv5=length(new.variable5.v)

一个向量的值的示例

new.variable1.v
 [1] 193 194 196 197 198 199 201 202 203 204 205 206 208 209 210 211

我试过这个但是没有用

for (i in 1:5){
paste0("lv",i,"")=length(paste0(paste("new.variable", i, sep =""),".","v"))
  }

3 个答案:

答案 0 :(得分:1)

我们可以获得新的变种'在list中,获取每个'列表中的length。元素lengths。使用paste设置向量的名称,转换为list并使用list2env

创建新对象
l1 <- lengths(mget(ls(pattern = "new.variable\\d+\\.v")))
l2 <- setNames(l1, paste0("lv", seq_along(l1)))
list2env(as.list(l2), envir = .GlobalEnv)

数据

set.seed(24)
new.variable1.v <- sample(190:220, 10, replace=FALSE)
new.variable2.v <- sample(150:180, 15, replace=FALSE)
new.variable3.v <- sample(190:220, 20, replace=FALSE)
new.variable4.v <- sample(150:180, 8, replace=FALSE)
new.variable5.v <- sample(190:220, 21, replace=FALSE)

答案 1 :(得分:1)

@joran在上面的评论中是正确的。将变量保存到列表中,如下所示:

myList <- list(A = 1:3, B = 1:4, C = 1:5)

然后您可以使用其中一个apply函数 - 此处为sapply,因为您可能希望返回为向量。如果你想要一个清单,请使用lapply

sapply(myList, length)

输出:

A B C 
3 4 5 

答案 2 :(得分:0)

如果你不介意你的矢量大小在列表中

,这是有效的
vectors <- list(v1=1:5,v2=2:6)

vector_sizes <- list(v1Size=NA, v2Size=NA)

for(i in 1:length(vectors)) {
  print(vectors[i])
  vector_sizes[i] <- length(unlist(vectors[i]))
}

vector_sizes

但它没有优化,下面的速度要快得多

sapply(vectors, length)