在下面的代码中,我期待长度为96的东西,但我得到一个长度为48的列表.你能解释一下这个结果吗?
- num_empty = 96
- empty_vecs = as.list(1:num_empty)
- for(i in 1:num_empty){empty_vecs[[i]] = c()}
- length(empty_vecs)
- [1] 48
现在我将回答导致我遇到这种行为的问题.最初的问题是,“如何在R中列出空载体?”答案是“用上面的代码中的字符()替换c().”
解决方法
设置等于c()(也称为NULL)的列表元素会删除它们,因此该循环具有删除列表中每个其他元素的效果.要看到这一点,请考虑一个较小的示例,迭代打印出结果向量:
- e <- list(1,2,3,4)
- e
- # [[1]]
- # [1] 1
- #
- # [[2]]
- # [1] 2
- #
- # [[3]]
- # [1] 3
- #
- # [[4]]
- # [1] 4
- #
- e[[1]] <- c()
- e
- # [[1]]
- # [1] 2
- #
- # [[2]]
- # [1] 3
- #
- # [[3]]
- # [1] 4
- #
- e[[2]] <- c()
- e
- # [[1]]
- # [1] 2
- #
- # [[2]]
- # [1] 4
- e[[3]] <- c()
- e
- # [[1]]
- # [1] 2
- #
- # [[2]]
- # [1] 4
- e[[4]] <- c()
- e
- # [[1]]
- # [1] 2
- #
- # [[2]]
- # [1] 4
请注意,如果您确实想要创建96个NULL值的列表,则可以尝试:
- replicate(96,c(),FALSE)