Я знаю, как добавить строку к именам строк списка с помощью rapply
.
out1 <- rapply(L, function(x)
`rownames<-`(x, paste0("lala.", rownames(x))), how="list")
out1$a$ct
# x1 x2 x3
# lala.a 1 1 1
# lala.b 1 1 1
Как это можно сделать, если я хочу перебрать строку в зависимости от имени подсписка?
В lapply
ситуациях я бы повторял последовательности с lapply(seq_along(L)
, но я не уверен, работает ли это с rapply
. Э.Г.
out2 <- rapply(seq_along(L), function(x) names(L)[x], how="list")
не будет работать, и это даст
Error in rapply(seq(L), function(x) names(L[[x]]), how = "list") :
'object' must be a list or expression
Может быть, мне нужен еще *apply
например mapply
Редактирование: Интересно, можно ли это сделать в рамках одного вызова базовой функции из семейства *apply
.
Я тоже пробовал outer
outer(seq(L$a),seq(L$b), Vectorize(function(x, y)
`rownames<-`(L[[x]][[y]], paste0(names(L[[x]])[y], ".", rownames(L[[x]][[y]])))))
, который не смог:
Error in dim(robj) <- c(dX, dY) :
dims [product 4] do not match the length of object [24]
, а
x <- 1; y <- 2
`rownames<-`(L[[x]][[y]], paste0(names(L[[x]])[y], ".", rownames(L[[x]][[y]])))
# x1 x2 x3
# tr.a 1 1 1
# tr.b 1 1 1
Ожидаемый результат
# $a
# $a$ct
# x1 x2 x3
# ct.a 1 1 1
# ct.b 1 1 1
#
# $a$tr
# x1 x2 x3
# tr.a 1 1 1
# tr.b 1 1 1
#
#
# $b
# $b$ct
# x1 x2 x3
# ct.a 1 1 1
# ct.b 1 1 1
#
# $b$tr
# x1 x2 x3
# tr.a 1 1 1
# tr.b 1 1 1
Данные
L <- list(a = list(ct = structure(c(1, 1, 1, 1, 1, 1), .Dim = 2:3, .Dimnames = list(
c("a", "b"), c("x1", "x2", "x3"))), tr = structure(c(1, 1,
1, 1, 1, 1), .Dim = 2:3, .Dimnames = list(c("a", "b"), c("x1",
"x2", "x3")))), b = list(ct = structure(c(1, 1, 1, 1, 1, 1), .Dim = 2:3, .Dimnames = list(
c("a", "b"), c("x1", "x2", "x3"))), tr = structure(c(1, 1,
1, 1, 1, 1), .Dim = 2:3, .Dimnames = list(c("a", "b"), c("x1",
"x2", "x3")))))