Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的向量循环_R_Loops_Generics_Vector - Fatal编程技术网

R中的向量循环

R中的向量循环,r,loops,generics,vector,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 我

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

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"))
  }

我们可以在
列表
中获取'new.variable',使用
长度
获取每个'list'元素的
长度。使用粘贴设置向量的名称,转换为列表,并使用列表创建新对象

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

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

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

A B C 
3 4 5 

如果你不介意你的向量大小在一个列表中,这是可行的

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

如果您发现自己用
foo1
foo2
等名称定义R对象,然后更糟糕的是,您希望对所有对象执行类似的操作,这肯定表明您在没有将所有这些对象放在单个列表结构中时犯了一个错误。谢谢,它起到了作用。只是一个简短的跟进。如果我想循环向量v1,v2,v3,我需要用这个吗?ls(pattern=“new.variable\\d+\\.v”)。这主要是我试图理解的。@user4797853如果您的全局环境中有大约100个对象,则很难单独键入每个对象的名称,因此通过使用
ls()
这将使用指定的模式提取对象名称,并且
mget
列表中给出对象的值,谢谢,这是一个很好的解释
A B C 
3 4 5 
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)