【发布时间】:2017-09-25 12:35:39
【问题描述】:
我正在尝试将向量列表(本质上是多维数组)转换为数据框,但每次尝试都会得到意想不到的结果。
我的目标是实例化一个空白列表,用包含有关循环迭代信息的向量将其填充到 for 循环中,然后在完成后将其转换为数据框。
> vectorList <- list()
> for(i in 1:5){
+ vectorList[[i]] <- c("number" = i, "square root" = sqrt(i))
+ }
> vectorList
输出:
> [[1]]
> number square root
> 1 1
>
> [[2]]
> number square root
> 2.000000 1.414214
>
> [[3]]
> number square root
> 3.000000 1.732051
>
> [[4]]
> number square root
> 4 2
>
> [[5]]
> number square root
> 5.000000 2.236068
现在我希望它成为一个对 2 个变量进行 5 次观察的数据框,但尝试从“vectorList”创建一个数据框
numbers <- data.frame(vectorList)
导致 5 个变量的 2 次观察。
奇怪的是,它甚至不会被 reshape2 强制(我知道这将是一个糟糕的工作,但我尝试过)。
任何人有任何见解?
【问题讨论】:
-
只是关于您的方法的一般说明:如果可以避免的话,您不应该在 for 循环中增加这样的列表。当您在列表末尾添加某些内容时,R 必须复制整个列表。这对于小型案例来说很好,但如果您的列表很大(并且在您的案例中它变得越来越大),这可能会非常低效。
-
对于您的数据构建,您可以像这样使用
lapply:vectorList <- lapply(1:5, function(x) c(x, sqrt(x)))。