Contoh yang dapat direproduksi:

mat1 <- matrix(c(1,2,4,2,4,2,4,6,5,7,8,3), nrow = 3, ncol = 4, byrow = T)
mat2 <- matrix(c(2,1,7,8,2,6), nrow = 3, ncol = 2, byrow = T)
mat3 <- matrix(c(3,2,3,5,7,5,4,5,6,4,2,3,4,5,2), nrow = 3, ncol = 5, byrow = T)

list.mat <- list(mat1,mat2,mat3)

> list.mat

[[1]]
     [,1] [,2] [,3] [,4]
[1,]    1    2    4    2
[2,]    4    2    4    6
[3,]    5    7    8    3

[[2]]
     [,1] [,2]
[1,]    2    1
[2,]    7    8
[3,]    2    6

[[3]]
     [,1] [,2] [,3] [,4] [,5]
[1,]    3    2    3    5    7
[2,]    5    4    5    6    4
[3,]    2    3    4    5    2

Tujuan 1: Menemukan minimum setiap baris dari setiap elemen. Output yang diharapkan [[1]]-> 1,2,3 [[2]]-> 1,7,2 [[3]]-> 2,4,2

Tujuan 2: Menemukan nomor kolom yang sesuai. Output yang diharapkan [[1]]-> 1,2,4 [[2]]-> 2,1,1 [[3]]-> 2,2,1

***CATATAN bahwa di [[3]][3,] ada dua angka minimum, satu di kolom 1 dan lainnya di kolom 5. Dalam kasus seperti itu, laporkan hanya kolom yang didahulukan.

Tujuan 3: Temukan jumlah keluaran yang ditemukan dalam tujuan 1 secara terpisah untuk setiap daftar. Hasil yang diharapkan [[1]]-> 6 [[2]]-> 10 [[3]]-> 8

Saya mencari solusi umum yang berlaku untuk daftar yang jauh lebih besar daripada contoh yang diberikan.

1
Rel_Ai 23 April 2021, 13:40

3 jawaban

Jawaban Terbaik

Anda dapat menggunakan lapply :

output1 <- lapply(list.mat, function(x) apply(x, 1, min))
output1

#[[1]]
#[1] 1 2 3

#[[2]]
#[1] 1 7 2

#[[3]]
#[1] 2 4 2

output2 <- lapply(list.mat, function(x) apply(x, 1, which.min))
output2

#[[1]]
#[1] 1 2 4

#[[2]]
#[1] 2 1 1

#[[3]]
#[1] 2 2 1

output3 <- lapply(output1, sum)
output3

#[[1]]
#[1] 6

#[[2]]
#[1] 10

#[[3]]
#[1] 8

Anda dapat menempatkan kode dalam suatu fungsi jika Anda ingin menerapkan ini untuk beberapa daftar tersebut.

2
Ronak Shah 23 April 2021, 10:46

Berikut adalah opsi R dasar menggunakan pmin

> lapply(list.mat, function(x) do.call(pmin, data.frame(x)))
[[1]]
[1] 1 2 3

[[2]]
[1] 1 7 2

[[3]]
[1] 2 4 2
2
ThomasIsCoding 23 April 2021, 19:46

Kita bisa menggunakan dapply dari collapse yang bisa lebih cepat

library(collapse)
lapply(list.mat, dapply, fmin, MARGIN = 1)
#[[1]]
#[1] 1 2 3

#[[2]]
#[1] 1 7 2

#[[3]]
#[1] 2 4 2
2
akrun 23 April 2021, 16:58