如何在R中使用for循环创建变量列表
我有一个100个变量的列表,比如v1到v100。 我想创建一个列表,将这些变量保存在seprate列中。我所做的是如何在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
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种元素的列表,它会更具可复制性。。。