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

时间:2014-07-31 08:05:11

标签: r list loops

我有一个包含100个变量的列表,比如v1到v100。 我想创建一个列表,将每个变量保存在一个单独的列中。我所做的是

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'

3 个答案:

答案 0 :(得分:3)

您可以使用mget根据多个对象创建列表。

以下是一个例子:

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

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

自动分配正确的名称。

答案 1 :(得分:0)

好的,让我们先尝试让事情重现。

# 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

答案 2 :(得分:0)

如果你有变量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中通常那样创建对该变量的引用。因此,如果您随后更改变量的值,则它也不会在列表中更改(反之亦然)