#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)