如何在R中使用for循环创建变量列表

如何在R中使用for循环创建变量列表,r,list,loops,R,List,Loops,我有一个100个变量的列表,比如v1到v100。 我想创建一个列表,将这些变量保存在seprate列中。我所做的是 s=list() for (i in 1:100){ name=paste("v",i,sep="") s[name]=vi } 现在的问题是如何使R将vi作为变量的名称,该变量将存储在列表中。在运行上述编写的代码时,控制台将显示错误 Error in s[name] = vi : `cannot coerce type 'closure' to vector of t

我有一个100个变量的列表,比如v1到v100。 我想创建一个列表,将这些变量保存在seprate列中。我所做的是

s=list()
for (i in 1:100){
  name=paste("v",i,sep="")
  s[name]=vi
}

现在的问题是如何使R将vi作为变量的名称,该变量将存储在列表中。在运行上述编写的代码时,控制台将显示错误

Error in s[name] = vi : 
`cannot coerce type 'closure' to vector of type 'list'

好的,让我们先让事情变得可复制

# I generate a list of 100 random normal vector with 50 elements
s <- list()
for(i in 1:100) s[[i]] <- rnorm(50)

# Creating the names vector(!) does not need any loops. 
nms <- paste("v",1:100,sep="")

# if you already have the list like you say, you're done.
names(s) <- nms
#我生成一个包含100个随机法向量和50个元素的列表

好的,让我们先让事情变得可复制

# I generate a list of 100 random normal vector with 50 elements
s <- list()
for(i in 1:100) s[[i]] <- rnorm(50)

# Creating the names vector(!) does not need any loops. 
nms <- paste("v",1:100,sep="")

# if you already have the list like you say, you're done.
names(s) <- nms
#我生成一个包含100个随机法向量和50个元素的列表

s您可以使用
mget
创建基于多个对象的列表

下面是一个例子:

v1 <- 1:3
v2 <- 4:6

mget(paste0("v", 1:2))
# $v1
# [1] 1 2 3
# 
# $v2
# [1] 4 5 6

v1您可以使用
mget
创建基于多个对象的列表

下面是一个例子:

v1 <- 1:3
v2 <- 4:6

mget(paste0("v", 1:2))
# $v1
# [1] 1 2 3
# 
# $v2
# [1] 4 5 6

v1如果有变量v1、v2、v3等,可以使用:

s=list()
for (i in 1:100){
  name=paste("v",i,sep="")
  s[[name]]=get(name) #write to the list with [[ ]] operator
}
get函数返回变量的值,其名称等于作为参数传递的字符串(如果变量存在)


请注意,这将复制该值,并且不会像在R中一样创建对该变量的引用。因此,如果您随后更改变量的值,则该变量在列表中也不会更改(反之亦然)。

如果您有变量v1、v2、v3等,则可以使用:

s=list()
for (i in 1:100){
  name=paste("v",i,sep="")
  s[[name]]=get(name) #write to the list with [[ ]] operator
}
get函数返回变量的值,其名称等于作为参数传递的字符串(如果变量存在)


请注意,这将复制该值,并且它不会像在R中一样创建对该变量的引用。因此,如果您随后更改变量的值,它在列表中也不会更改(反之亦然)。

您说您有一个包含100个变量的列表,那么这些变量已经在列表中了还是?变量当前存储在哪里?你真的有100个不同的变量v1=x;v2=y;v3=z等等?
s[[i]]=vi
而不是
s[name]=vi
。。。也许这就是你要找的。在任何情况下,您得到的错误都是因为使用了
s[name]
您说您有一个包含100个变量的列表,所以这些变量已经在列表中了,或者?变量当前存储在哪里?你真的有100个不同的变量v1=x;v2=y;v3=z等等?
s[[i]]=vi
而不是
s[name]=vi
。。。也许这就是你要找的。在任何情况下,您得到的错误都是因为使用了
s[name]
,或者如果您希望在不指定索引的情况下一次获取所有的
mget(ls(pattern=“^v[0-9]$”)
cool,+1表示mget。尽管如果我们创建OP声称拥有的100个元素的列表,或者如果您希望一次获得所有元素而不指定索引
mget(ls(pattern=“^v[0-9]$”)
cool,+1表示mget,那么它的重现性会更好。虽然如果我们创造出OP声称拥有的100种元素的列表,它会更具可复制性。。。