重塑lapply创建的列表

时间:2020-07-15 15:34:27

标签: r list lapply reshape mclapply

我的矢量具有经度和纬度:

longDim
[1] -79.65770 -79.21761 -78.77750
latiDim
[1] -39.70588 -39.26471 -38.82353

,我想并行遍历它们的组合。为此,我首先使用expand.grid创建一个具有所有可能组合的数据框:

my.grid <- expand.grid(longDim, latiDim) 

然后在结果数据帧的行上使用mclapply()

mclapply(1:nrow(my.grid), function(x){some_function})

其中some_function返回一个包含两个对象的列表,每个对象的长度为139。

因此,结果是我得到了一个尺寸为9x2的嵌套列表,如下所示:

str(l1)
List of 9
 $ :List of 2
  ..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
 $ :List of 2
  ..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
 $ :List of 2
  ..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
 $ :List of 2
  ..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
 $ :List of 2
  ..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
 $ :List of 2
  ..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
 $ :List of 2
  ..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
 $ :List of 2
  ..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
 $ :List of 2
  ..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...

现在,我需要将该列表从9x2重新调整为3x3x2尺寸。这是我正在寻找的格式:

str(l2)
List of 3
 $ :List of 3
  ..$ :List of 2
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ :List of 2
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ :List of 2
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
 $ :List of 3
  ..$ :List of 2
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ :List of 2
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ :List of 2
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
 $ :List of 3
  ..$ :List of 2
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ :List of 2
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  ..$ :List of 2
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
  .. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
  .. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...

我该如何实现?

可以在以下位置找到用于重现l1l2的代码:https://pastebin.com/raw/LTyZi0mp(太长了,无法在此处发布)

2 个答案:

答案 0 :(得分:1)

您可以使用basenlp.add_pipe(compounds, "compounds", before="ner")

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

data = np.genfromtxt("matrix.txt");

data_new = data.reshape([1000,1000])

ax.matshow(data_new)

测试

Red     : > 0.1

Blue    : 0.01-0.1

Magenta : 0.001-0.01

Yellow  : 0.0001-0.001

Brown   : 0.00001-0.0001

Green   : 0.000001-0.00001

Gray    : < 0.000001

答案 1 :(得分:1)

我们还可以使用gl创建分组索引以进行split

split(lst, as.integer(gl(length(lst1), 3, length(lst1))))

数据

lst1 <- replicate(9, list(list(x = 1:5, y = 1:5)))