#r #matrix #lapply
Вопрос:
Я хочу составить список из четырех матриц 2х2 из этого списка
str(SC_sum) List of 4 $ : Named num [1:4] 0.5927 0.2927 0.5977 0.0227 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.408 0.705 0.401 0.4 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.0758 0.1521 0.1028 0.0757 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.924 0.848 0.897 0.454 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard"
с lapply(SC_sum, "matrix", nrow = 2, byrow = T)
Я ожидаю , что моя chisel
матрица будет matrix(c(0.5926667, 0.4083333, 0.0758125, 0.9240000), nrow = 2, byrow = F)
, которая является первым элементом в каждом из четырех векторов SC_sum
, затем disc
матрица будет комбинацией второго элемента в каждом векторе SC_sum
и так далее.
Моя текущая chisel
матрица — matrix(c(0.59266667, 0.29266667, 0.59766667, 0.02266667), nrow = 2, byrow = F)
это перестановка первого вектора. Как мне изменить свой код? Большое спасибо!
Ответ №1:
Как насчет этого? Вот, x
занимает место вашего SC_sum
.
x lt;- split(seq_len(16), gl(4, 4)) x lt;- lapply(x, `nameslt;-`, letters[1:4]) x
#r #matrix #lapply
Вопрос:
Я хочу составить список из четырех матриц 2х2 из этого спискаstr(SC_sum) List of 4 $ : Named num [1:4] 0.5927 0.2927 0.5977 0.0227 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.408 0.705 0.401 0.4 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.0758 0.1521 0.1028 0.0757 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.924 0.848 0.897 0.454 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard"
с
lapply(SC_sum, "matrix", nrow = 2, byrow = T)
Я ожидаю , что моя
chisel
матрица будетmatrix(c(0.5926667, 0.4083333, 0.0758125, 0.9240000), nrow = 2, byrow = F)
, которая является первым элементом в каждом из четырех векторовSC_sum
, затемdisc
матрица будет комбинацией второго элемента в каждом вектореSC_sum
и так далее.Моя текущая
chisel
матрица -matrix(c(0.59266667, 0.29266667, 0.59766667, 0.02266667), nrow = 2, byrow = F)
это перестановка первого вектора. Как мне изменить свой код? Большое спасибо!Ответ №1:
Как насчет этого? Вот,
x
занимает место вашегоSC_sum
.x lt;- split(seq_len(16), gl(4, 4)) x lt;- lapply(x, `nameslt;-`, letters[1:4]) x
1` a b c d 1 2 3 4
#r #matrix #lapply
Вопрос:
Я хочу составить список из четырех матриц 2х2 из этого списка
str(SC_sum) List of 4 $ : Named num [1:4] 0.5927 0.2927 0.5977 0.0227 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.408 0.705 0.401 0.4 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.0758 0.1521 0.1028 0.0757 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.924 0.848 0.897 0.454 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard"
с
lapply(SC_sum, "matrix", nrow = 2, byrow = T)
Я ожидаю , что моя
chisel
матрица будетmatrix(c(0.5926667, 0.4083333, 0.0758125, 0.9240000), nrow = 2, byrow = F)
, которая является первым элементом в каждом из четырех векторовSC_sum
, затемdisc
матрица будет комбинацией второго элемента в каждом вектореSC_sum
и так далее.Моя текущая
chisel
матрица -matrix(c(0.59266667, 0.29266667, 0.59766667, 0.02266667), nrow = 2, byrow = F)
это перестановка первого вектора. Как мне изменить свой код? Большое спасибо!Ответ №1:
Как насчет этого? Вот,
x
занимает место вашегоSC_sum
.x lt;- split(seq_len(16), gl(4, 4)) x lt;- lapply(x, `nameslt;-`, letters[1:4]) x
2` a b c d 5 6 7 8
#r #matrix #lapply
Вопрос:
Я хочу составить список из четырех матриц 2х2 из этого списка
str(SC_sum) List of 4 $ : Named num [1:4] 0.5927 0.2927 0.5977 0.0227 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.408 0.705 0.401 0.4 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.0758 0.1521 0.1028 0.0757 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.924 0.848 0.897 0.454 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard"
с
lapply(SC_sum, "matrix", nrow = 2, byrow = T)
Я ожидаю , что моя
chisel
матрица будетmatrix(c(0.5926667, 0.4083333, 0.0758125, 0.9240000), nrow = 2, byrow = F)
, которая является первым элементом в каждом из четырех векторовSC_sum
, затемdisc
матрица будет комбинацией второго элемента в каждом вектореSC_sum
и так далее.Моя текущая
chisel
матрица -matrix(c(0.59266667, 0.29266667, 0.59766667, 0.02266667), nrow = 2, byrow = F)
это перестановка первого вектора. Как мне изменить свой код? Большое спасибо!Ответ №1:
Как насчет этого? Вот,
x
занимает место вашегоSC_sum
.x lt;- split(seq_len(16), gl(4, 4)) x lt;- lapply(x, `nameslt;-`, letters[1:4]) x
3` a b c d 9 10 11 12
#r #matrix #lapply
Вопрос:
Я хочу составить список из четырех матриц 2х2 из этого списка
str(SC_sum) List of 4 $ : Named num [1:4] 0.5927 0.2927 0.5977 0.0227 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.408 0.705 0.401 0.4 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.0758 0.1521 0.1028 0.0757 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard" $ : Named num [1:4] 0.924 0.848 0.897 0.454 ..- attr(*, "names")= chr [1:4] "chisel" "disc" "field_cultivator" "moldboard"
с
lapply(SC_sum, "matrix", nrow = 2, byrow = T)
Я ожидаю , что моя
chisel
матрица будетmatrix(c(0.5926667, 0.4083333, 0.0758125, 0.9240000), nrow = 2, byrow = F)
, которая является первым элементом в каждом из четырех векторовSC_sum
, затемdisc
матрица будет комбинацией второго элемента в каждом вектореSC_sum
и так далее.Моя текущая
chisel
матрица -matrix(c(0.59266667, 0.29266667, 0.59766667, 0.02266667), nrow = 2, byrow = F)
это перестановка первого вектора. Как мне изменить свой код? Большое спасибо!Ответ №1:
Как насчет этого? Вот,
x
занимает место вашегоSC_sum
.x lt;- split(seq_len(16), gl(4, 4)) x lt;- lapply(x, `nameslt;-`, letters[1:4]) x
4` a b c d 13 14 15 16
m lt;- matrix(unlist(x), nrow = length(x[[1]]), ncol = length(x), dimnames = list(names(x[[1]]), NULL)) m
[,1] [,2] [,3] [,4] a 1 5 9 13 b 2 6 10 14 c 3 7 11 15 d 4 8 12 16
l lt;- apply(m, 1, matrix, ncol = 2, simplify = FALSE) l
$a [,1] [,2] [1,] 1 9 [2,] 5 13 $b [,1] [,2] [1,] 2 10 [2,] 6 14 $c [,1] [,2] [1,] 3 11 [2,] 7 15 $d [,1] [,2] [1,] 4 12 [2,] 8 16
Если вы действительно хотите использовать
lapply
и неapply
хотите , то вы можете это сделать:index lt;- seq_along(x[[1]]) names(index) lt;- names(x[[1]]) l lt;- lapply(index, function(i) matrix(vapply(x, `[[`, 0, i), ncol = 2))
Но поскольку ваши данные в основном прямоугольные, построение и работа с матрицей (я думаю) намного более интуитивны.
Комментарии:
1. Большое спасибо.
vapply
Совет хорошо работает для меня.