我正在尝试优化下面的代码
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"))
}
答案 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)