Saya memiliki daftar yang berisi beberapa karakteristik dasar pabrik (seperti kapasitas, omset). Semua nilai awalnya disetel ke NULL:

#My List:
list.var <- list(Capacity = NULL, Production = NULL)
list <- list(Factory1 = list.var, Factory2 = list.var)
> list
$Factory1
$Factory1$Capacity
NULL

$Factory1$Production
NULL


$Factory2
$Factory2$Capacity
NULL

$Factory2$Production
NULL

Saya juga memiliki bingkai data yang berisi nilai "hilang" secara terpisah untuk setiap karakteristik untuk semua pabrik, seperti itu:

> #My Data Frame:
> df.capacity <- data.frame(Factory = c("Factory1", "Factory2"), Capacity = c(100,200))
> df.capacity
   Factory Capacity
1 Factory1      100
2 Factory2      200

Saya ingin menetapkan nilai kapasitas di df.capacity ke pabrik yang sesuai dalam daftar saya. Hasilnya akan terlihat seperti ini:

$Factory1
$Factory1$Capacity
[1] 100

$Factory1$Production
NULL


$Factory2
$Factory2$Capacity
[1] 200

$Factory2$Production
NULL

Bagaimana saya bisa melakukan ini? (perhatikan bahwa saya memiliki banyak pabrik dan bahkan lebih banyak karakteristik, jadi saya harus melakukannya secara otomatis setiap kali seperti gabungan kiri dalam kasus bingkai data). Saya mencoba mengonversi bingkai data menjadi daftar dan kemudian menggabungkan dengan yang asli, tetapi tidak berhasil untuk saya.

0
Giorgio 11 Mei 2021, 23:46

2 jawaban

Jawaban Terbaik

Dari basis R, Anda juga dapat melakukan:

modifyList(list, split(df.capacity[-1], df.capacity[1]))

$Factory1
$Factory1$Capacity
[1] 100

$Factory1$Production
NULL


$Factory2
$Factory2$Capacity
[1] 200

$Factory2$Production
NULL
2
Onyambu 11 Mei 2021, 21:17

Kita bisa match untuk mendapatkan nilai yang sesuai dan kemudian melakukan tugas

library(purrr)
imap(list, ~  {
      .x$Capacity <- df.capacity$Capacity[match(.y, df.capacity$Factory)]
       .x})

Atau dengan Map dari base R

Map(function(x, y) {
         x$Capacity <- df.capacity$Capacity[match(y, df.capacity$Factory)]
         x

       },
      list, names(list))

-keluaran

$Factory1
$Factory1$Capacity
[1] 100

$Factory1$Production
NULL


$Factory2
$Factory2$Capacity
[1] 200

$Factory2$Production
NULL

Atau menggunakan loop for

for(i in seq_along(df.capacity$Factory)) list[[df.capacity$Factory[i]]]$Capacity <- df.capacity$Capacity[i]
1
akrun 11 Mei 2021, 21:59