извлекать определенные строки из вложенных списков класса dist в r - PullRequest
0 голосов
/ 10 мая 2019

Я уверен, что этот вопрос является дубликатом, но я не могу найти правильное решение. У меня есть большой вложенный список, который на самом деле является списком выходных данных класса 'dist' из lapply dist (). Теперь я хочу извлечь последнюю строку из каждого списка (поскольку меня заботило только расстояние между последними строками моих исходных списков и всеми другими строками в этом же вложенном списке. Я мог бы преобразовать это в матрицу, но это не действительно помог мне.

Из нескольких связанных постов Извлечение, а затем row.bind data.frames из вложенных списков и R - извлечение информации из списка списков data.frames и других, которые я получил ближе.

Я могу извлечь первый элемент (соответствующий первым столбцам) из каждого вложенного списка, используя это, но я хочу строки: sapply(df,'[[',1)

Это что-то делает, но не уверен, что именно честно: lapply(df, function(x) lapply(x, '[' , drop = FALSE))

Мой первоначальный ввод в dist () был следующим. У меня есть вложенный список из 1000 списков, которые имеют координаты x, y, z (есть много строк, вот пример): [[1]] x y z -5.924184e-02 -0.0101882607 0.0017658100 -8.884432e-02 0.0454085919 -0.1072237461 1.495407e-02 0.0592509097 -0.0107400982<br> [[2]] 5.211102e-02 -0.0141554617 -0.0176815372 -2.861500e-02 -0.1155798724 0.0561973096 2.230498e-03 -0.0264566373 -0.0501298532 Затем я использовал эту функцию для создания 1000 дистанционных матриц:

lapply(orig.df[1:1000],dist) -> df

Вот верхний вывод из str (df)

str(df)
List of 1000
 $ :Class 'dist'  atomic [1:2628] 0.126 0.102 0.136 0.104 0.139 ...
  .. ..- attr(*, "Size")= int 73
  .. ..- attr(*, "Labels")= chr [1:73] "2" "8" "10" "14" ...
  .. ..- attr(*, "Diag")= logi FALSE
  .. ..- attr(*, "Upper")= logi FALSE
  .. ..- attr(*, "method")= chr "euclidean"
  .. ..- attr(*, "call")= language FUN(x = X[[i]])

В основном я хочу сделать следующее:

df[1:1000][nrow(df),]

Для всех 1000 вложенных списков (матрицы расстояний) возьмите последнюю «строку» и все «столбцы». Это матрица расстояний класса dist. Кажется, достаточно просто, но мне трудно. Спасибо за помощь.

1 Ответ

0 голосов
/ 10 мая 2019

Вот пример использования минимальных выборочных данных на основе mtcars

lst <- lapply(1:3, function(x) dist(mtcars[, 1:3]))

Теперь мы извлекаем последнюю строку каждой dist матрицы из lst

lapply(lst, function(x) { mat <- as.matrix(x); mat[nrow(mat), ] })
#[[1]]
#          Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive
#         39.0532969          39.0532969          13.0751673         137.0145978
#  Hornet Sportabout             Valiant          Duster 360           Merc 240D
#        239.0487189         104.0715619         239.1388927          25.8745048
#           Merc 230            Merc 280           Merc 280C          Merc 450SE
#         19.8494332          46.6947535          46.7816203         154.9323723
#         Merc 450SL         Merc 450SLC  Cadillac Fleetwood Lincoln Continental
#        154.9059392         154.9757400         351.1951025         339.2020047
#  Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla
#        319.0954246          43.7068644          46.1853873          51.4418118
#      Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28
#          0.9055385         197.1289172         183.1486828         229.1781185
#   Pontiac Firebird           Fiat X1-9       Porsche 914-2        Lotus Europa
#        279.0373452          42.4123803           4.6529560          27.4191539
#     Ford Pantera L        Ferrari Dino       Maserati Bora          Volvo 142E
#        230.1029335          24.1431150         180.1581527           0.0000000
#
#[[2]]
#          Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive
#         39.0532969          39.0532969          13.0751673         137.0145978
#  Hornet Sportabout             Valiant          Duster 360           Merc 240D
#        239.0487189         104.0715619         239.1388927          25.8745048
#           Merc 230            Merc 280           Merc 280C          Merc 450SE
#         19.8494332          46.6947535          46.7816203         154.9323723
#         Merc 450SL         Merc 450SLC  Cadillac Fleetwood Lincoln Continental
#        154.9059392         154.9757400         351.1951025         339.2020047
#  Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla
#        319.0954246          43.7068644          46.1853873          51.4418118
#      Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28
#          0.9055385         197.1289172         183.1486828         229.1781185
#   Pontiac Firebird           Fiat X1-9       Porsche 914-2        Lotus Europa
#        279.0373452          42.4123803           4.6529560          27.4191539
#     Ford Pantera L        Ferrari Dino       Maserati Bora          Volvo 142E
#        230.1029335          24.1431150         180.1581527           0.0000000
#
#[[3]]
#          Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive
#         39.0532969          39.0532969          13.0751673         137.0145978
#  Hornet Sportabout             Valiant          Duster 360           Merc 240D
#        239.0487189         104.0715619         239.1388927          25.8745048
#           Merc 230            Merc 280           Merc 280C          Merc 450SE
#         19.8494332          46.6947535          46.7816203         154.9323723
#         Merc 450SL         Merc 450SLC  Cadillac Fleetwood Lincoln Continental
#        154.9059392         154.9757400         351.1951025         339.2020047
#  Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla
#        319.0954246          43.7068644          46.1853873          51.4418118
#      Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28
#          0.9055385         197.1289172         183.1486828         229.1781185
#   Pontiac Firebird           Fiat X1-9       Porsche 914-2        Lotus Europa
#        279.0373452          42.4123803           4.6529560          27.4191539
#     Ford Pantera L        Ferrari Dino       Maserati Bora          Volvo 142E
#        230.1029335          24.1431150         180.1581527           0.0000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...