Saya memiliki variabel yang mengevaluasi ke T/F jika ada variabel bernama "aic".

aic_exist <- c("aic" %in% names(fexp_list[[i]]), "aic" %in% names(fg_list[[i]]), "aic" %in% names(fln_list[[i]]), "aic" %in% names(fnorm_list[[i]]), "aic" %in% names(funif_list[[i]]), "aic" %in% names(fw_list[[i]])).

Aic_exist mengevaluasi ke [1] FALSE TRUE TRUE TRUE TRUE TRUE.

Saya ingin membuat variabel lain aic_values yang hanya berisi nilai menggunakan variabel aic_exist. yaitu tidak menyertakan fexp_list karena tidak ada nilai aic.

Sesuatu seperti aic_values <- (c(fexp_list[[i]][["aic"]], fg_list[[i]][["aic"]], fln_list[[i]][["aic"]], fnorm_list[[i]][["aic"]], funif_list[[i]][["aic"]], fw_list[[i]][["aic"]])) tetapi membandingkan dengan aic_exist?

r
0
phald 12 Mei 2021, 17:04

1 menjawab

Jawaban Terbaik

Mari kita masukkan semua daftar Anda ke dalam daftar yang lebih besar:

big_list <- list(
  fexp_list[[i]],
  fg_list[[i]],
  fln_list[[i]],
  fnorm_list[[i]],
  funif_list[[i]],
  fw_list[[i]]
)

aic_exist <- sapply(big_list, function(x) "aic" %in% names(x))
## extract AIC from the elements it exists in
aic_values <- sapply(big_list[aic_exist], "[[", "aic")

[[i]] membuat saya berpikir Anda melakukan ini dalam satu lingkaran... jika Anda berbagi lebih banyak konteks, mungkin ada cara yang lebih baik. Paket purrr memiliki banyak utilitas untuk menangani daftar. Dimungkinkan untuk melakukan semuanya dalam satu atau dua baris dengan sesuatu seperti di bawah ini (jelas belum diuji):

library(purrr)
big_list = 
map_depth(list(fexp_list, fg_list, fln_list, ...), .depth = 3, pluck, "aic")
0
Gregor Thomas 12 Mei 2021, 14:28