0

我有一个名为的列表res,如下所示:

[[1]]
     [,1]     [,2]    
[1,] 275.0637 273.9386
[2,] 5.707791 5.755798

[[2]]
     [,1]     [,2]    
[1,] 126.8435 59.08806
[2,] 4.867521 3.258545

[[3]]
     [,1]     [,2]    
[1,] 23.50188 60.96321
[2,] 2.036354 3.737291

该列表包含总共 6 次模拟运行的结果。我将感兴趣的参数设置为三个不同的值,'0'(即 [[1]])、'25'(即 [[2]])和 '50'(即 [[3]] )。由于模型包含大量随机性,我为每个值(即 [,1]、[,2])运行了两次模型。我要求模型记录两个结果,每次迭代的“时间馈送”(即 [1,] 和“行驶距离”(即 [2,])。最终,我将为每个变量设置迭代模型 30 次。我想用来ggplot为三个模拟设置(即0、25、50)中的每一个创建一个显示“喂食时间”和“行进距离”的箱线图。我相信ggplot无法绘制列表,所以我尝试转换res到使用res2 <- data.frame(res) 看起来像的数据框:

        X1       X2     X1.1     X2.1     X1.2     X2.2
1 275.0637 273.9386 126.8435 59.08806 23.50188 60.96321
2 5.707791 5.755798 4.867521 3.258545 2.036354 3.737291

这对我来说看起来不太正确,因为现在所有三个模拟的结果都在同一行。将这些数据ggplot用于创建箱线图的任何帮助都会非常有帮助。提前致谢!

——尼尔

4

2 回答 2

1

do.call假设 ll 是您的列表,您可以rbind像这样使用:

do.call(rbind,lapply(seq_along(ll),
        function(x)data.frame(ll[[x]],iter=x)))

           X..1.      X..2. iter
[1,]  275.063700 273.938600    1
[2,]    5.707791   5.755798    1
[1,]1 126.843500  59.088060    2
[2,]1   4.867521   3.258545    2
[1,]2  23.501880  60.963210    3
[2,]2   2.036354   3.737291    3

操作说明后编辑

interest <- c(0,25,50)
 do.call(rbind,lapply(seq_along(ll),
        function(x)data.frame(x= unlist(ll[[x]]),interst=interest[x])))

                                               interst=interest[x] .... [TRUNCATED] 

                 x interst
X..1.1  275.063700       0
X..1.2    5.707791       0
X..2.1  273.938600       0
X..2.2    5.755798       0
X..1.11 126.843500      25
X..1.21   4.867521      25
X..2.11  59.088060      25
X..2.21   3.258545      25
X..1.12  23.501880      50
X..1.22   2.036354      50
X..2.12  60.963210      50
X..2.22   3.737291      50

编辑,因为 OP 在这里不提供数据 ll :

res <- list(read.table(text='
     [,1]     [,2]    
[1,] 275.0637 273.9386
[2,] 5.707791 5.755798'),
read.table(text='
     [,1]     [,2]    
[1,] 126.8435 59.08806
[2,] 4.867521 3.258545'),
read.table(text='
     [,1]     [,2]    
[1,] 23.50188 60.96321
[2,] 2.036354 3.737291'))
于 2013-07-06T16:22:25.733 回答
0

我会做

names(res) = c("0", "25", "50")
m = reshape2::melt(res, id = 1)

但也许它不起作用,我在脑海中尝试过,因为你没有提供可用形式的数据。

于 2013-07-06T16:57:43.040 回答