如果我说l = list()
,然后我做了l[[27]] = 100
,它会创建26个其他值为NULL
的条目。有没有办法避免这种情况?如何在R中分配一个列表而不创建一堆新元素?
例如,如果我运行:l <- list(); for (i in c(4,7,1)) { l[[i]] <- i^1 }
它将创造的条目从1到7,和NULL值的列表中的所有没分配的。我怎样才能避免这些虚假的条目?
如果我说l = list()
,然后我做了l[[27]] = 100
,它会创建26个其他值为NULL
的条目。有没有办法避免这种情况?如何在R中分配一个列表而不创建一堆新元素?
例如,如果我运行:l <- list(); for (i in c(4,7,1)) { l[[i]] <- i^1 }
它将创造的条目从1到7,和NULL值的列表中的所有没分配的。我怎样才能避免这些虚假的条目?
的指数使用字符值:
l <- list(); for (i in c(4,7,1)) { l[[as.character(i)]] <- i^1 }
> l
$`4`
[1] 4
$`7`
[1] 7
$`1`
[1] 1
你可以添加到列表:
l <- list(); for (i in c(4,7,1)) { l <- append(l, i^1) }
我会避免for
回路,并使用lapply
:
> x <- c(4, 7, 1)
> setNames(lapply(x, `^`, 1), x)
$`4`
[1] 4
$`7`
[1] 7
$`1`
[1] 1
乔希评论你也可以做'setNames(as.list(x^1),x)'。是的,这会在这里工作,值得一提的是,谢谢。我的意思是可以应用一个非向量化的函数,所以它更一般。 – flodel 2013-02-10 20:17:40
同意,这就是为什么我删除了我的查询:我意识到你正在寻找更一般的情况! – 2013-02-10 20:26:47