как назвать результат списка списка в R

#r

Вопрос:

Предположим, у меня есть следующий список списка.

 s <- c(1,2,3)
ss <- c(4,5,6)
S <- list(s,ss)
h <- c(4,8,7)
hh <- c(0,3,4)
H <- list(h,hh)
HH <- list(S,H)
 

Я хотел бы назвать результат списка следующим образом:

 $First_model
$Res_1[[1]]
[1] 1 2 3

$Res_2[[2]]
[1] 4 5 6


$Second_model
$Res_1[[1]]
[1] 4 8 7

$Res_2[[2]]
[1] 0 3 4
 

Я попробовал следующее, но это не то, что я ожидал.

 names1 <- c("First","Second")
# And second you paste them to your list
names(HH) <- paste0(names1,"_result",  sep = "")
 

Комментарии:

1. Я думаю, что вы неправильно истолковываете способ печати списка. Ваш ожидаемый результат недействителен, так $First_model как также должен быть началом второй строки. Это [[1]] то, чем вы хотите заменить $Res_1 . Вы можете сделать это, например, с помощью, names(HH$First) <- c("Res_1", "Res_2")

2. (Возможно) более приятный способ показать список-это str(HH)

3. @Bas Большое спасибо за вашу удивительную помощь.

Ответ №1:

Вы можете попробовать следующее —

 names1 <- c("First","Second")

lapply(setNames(HH, paste0(names1, '_Model')), function(x) 
  setNames(x, paste0('Res_', seq_along(x))))

#$First_Model
#$First_Model$Res_1
#[1] 1 2 3

#$First_Model$Res_2
#[1] 4 5 6


#$Second_Model
#$Second_Model$Res_1
#[1] 4 8 7

#$Second_Model$Res_2
#[1] 0 3 4
 

Ответ №2:

 library(purrr)
s <- c(1,2,3)
ss <- c(4,5,6)
S <- list(s,ss)
h <- c(4,8,7)
hh <- c(0,3,4)
H <- list(h,hh)
HH <- list(S,H)

names1 <- c("First","Second")
set_names(HH, names1) %>% map(~set_names(..1, c('Res_1', 'Res_2')))
#> $First
#> $First$Res_1
#> [1] 1 2 3
#> 
#> $First$Res_2
#> [1] 4 5 6
#> 
#> 
#> $Second
#> $Second$Res_1
#> [1] 4 8 7
#> 
#> $Second$Res_2
#> [1] 0 3 4
 

Создано 2021-06-03 пакетом reprex (v2.0.0)