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