如何自动创建NULL对象

时间:2018-01-10 20:56:05

标签: r

这个问题实际上变得更加有趣。

我的问题很简单。我该如何自动化?

g.names<-NULL
g.names1<-NULL
g.names2<-NULL
g.names3<-NULL
g.names4<-NULL
g.names5<-NULL
g.names6<-NULL
g.names7<-NULL
g.names8<-NULL
g.names9<-NULL
g.names10<-NULL
g.names11<-NULL
g.names12<-NULL

gt.names<-list(
g.names1=g.names1, 
g.names2=g.names2, 
g.names3=g.names3, 
g.names4=g.names4, 
g.names5=g.names5, 
g.names6=g.names6, 
g.names7=g.names7, 
g.names8=g.names8,
g.names9=g.names9, 
g.names10=g.names10, 
g.names11=g.names11, 
g.names12=g.names12, 
g.names=g.names)

gt.names

最初,下面提出的解决方案似乎在逻辑上解决了问题,

g.names <- list()
for (i in 1:13) {
   g.names[[i]] <- NULL
}
g.names

有趣的是,这不起作用!为列表中的对象分配NULL实际上等同于删除。所以,现在问题仍然存在。

1 个答案:

答案 0 :(得分:1)

&#34;污染&#34;这样做的方法是通过assignfor循环:

x <- c("", 1:12)
y <- paste("g.names", x, sep="")
for (v in y) {
  assign(v, NULL)
}

正如评论者指出的那样,上述方法污染严重......以下是使用列表的示例:

g.names <- list()
for (i in 1:13) {
  g.names[[i]] <- NULL
}
g.names

在这里,您将创建一个list对象,其中包含13个变量的值,对应于原始示例中的g.namesg.names1,...,g.names12。您可以使用g.names[[6]]来引用g.names5。污染较少,更优雅,更优雅。我想。

如果13 g.names只是一系列字符或数字,那么矢量就可以:

g.names <- rep(NULL, 13)
g.names

,在这种情况下,g.names[6]将相当于您问题中的g.names5