Я пытаюсь создать списки внутри списков, используя один вектор в R.
У меня есть вектор
Conditions = c('A', 'B', 'C', 'D')
и я хочу список, содержащий A, B, C и D (без проблем). Но тогда я также хочу, чтобы это были списки, содержащие четыре элемента, названные по следующим строкам: A vs A
, A vs B
, ... D vs C
, D vs D
, в конечном итоге заканчивающиеся списком из четырех списков (A, B , C и D) каждый из которых содержит еще четыре списка (списки 'vs'), к которым я могу добавить фреймы данных.
по сути, я хочу что-то вроде этого:
My list
|
|
| /- A vs A /- B vs A /- C vs A /- D vs A
| / / / /
| /- A vs B /- B vs B /- C vs B /- D vs B
| / / / /
---A-|-------------B-|------------C-|------------D-|
\ \ \ \
\ - A vs C \ - B vs C \ - C vs C \ - D vs C
\ \ \ \
\- A vs D \- B vs D \- C vs D \- D vs D
Вот что я пробовал:
Conditions <- c('A', 'B', 'C', 'D')
MyList <- as.list(Conditions)
for(i in 1:length(MyList)) {
for(i in 1:length(Conditions)) {
MyList[i] <- list(paste(MyList[i], 'vs', Conditions[i]))
}
}
Но это не работает. Например, мой первый предмет просто превращается из A
в A vs A vs A vs A vs A
.
Редактировать: для большей ясности, я бы хотел,
Список, например,
Letters
Это будет содержать четыре списка,
A
, B
, C
, D
Они в свою очередь будут содержать списки, соответствующие их именам:
A: A vs A
, A vs B
, A vs C
, A vs D
B: B vs A
, B vs B
, B vs C
, B vs D
C: C vs A
, C vs B
, C vs C
, C vs D
D: D vs A
, D vs B
, D vs C
, D vs D
Затем я помещу фрейм данных в каждое «vs».
Самый полезный ответ до сих пор был от MrFlick:
lapply(Conditions, function(x)
as.list(paste(x, "vs", Conditions)))
Что возвращает:
[[1]]
[[1]][[1]]
[1] "A vs A"
[[1]][[2]]
[1] "A vs B"
[[1]][[3]]
[1] "A vs C"
...
[[4]][[2]]
[1] "D vs B"
[[4]][[3]]
[1] "D vs C"
[[4]][[4]]
[1] "D vs D"
Все, что я хочу, это чтобы список был пустым, а строка использовалась в качестве имени. Для элемента чуть выше я думаю, что это будет выглядеть так:
[[D]][[D vs D]]
[1] NA #Data Frame DvsD.Rda to be added here later.