#r #for-loop
#r #для цикла
Вопрос:
Я анализирую данные PCA. Поэтому я должен сравнить PC1 с PC2, PC1 с PC3 и т.д. Я хочу сохранить эти объекты ggplot в вектор. Пока здесь никаких проблем нет. Я создаю вектор как :
Myplot <- vector('list',NumberToBeInserted)
и тогда я могу запустить цикл for или lapply. Однако предположим, что в ближайшем будущем мне нужно будет проанализировать PC2 против PC3 (до PC2 против PCn) или больше в целом PCn-1 против PCn. Поэтому мне нужно сгенерировать много этих векторов, чтобы хранить сравнения ПК в другом наборе. Допустим, я знаю, что мне нужно 5 векторов, подобных тому, который я предложил выше. Как я могу создать функцию, которая возвращает мне эти векторы?Имеет ли смысл этот вопрос или лучше сделать это вручную? Поскольку я хочу улучшить свои навыки работы с R, мне очень любопытно
Ответ №1:
Я не уверен, что это то, что вы ищете, но предположим, что у меня есть список из 5 сложных объектов (для примера здесь все они представляют собой простые символьные строки, но тот же метод будет работать для любого объекта R, такого как ggplot):
big_list <- list(PC1 = "Complex object1",
PC2 = "Complex object2",
PC3 = "Complex object3",
PC4 = "Complex object4",
PC5 = "Complex object5")
Если мне нужен новый список, содержащий каждую попарную комбинацию элементов в этом списке, я могу сделать:
all_combos <- apply(combn(5, 2), 2, function(i) big_list[i])
names(all_combos) <- NULL
Существует десять возможных парных комбинаций из 5 объектов, поэтому у меня будет список длиной 10, каждый из которых сам по себе является списком моих сложных объектов длиной два:
str(all_combos)
#> List of 10
#> $ :List of 2
#> ..$ PC1: chr "Complex object1"
#> ..$ PC2: chr "Complex object2"
#> $ :List of 2
#> ..$ PC1: chr "Complex object1"
#> ..$ PC3: chr "Complex object3"
#> $ :List of 2
#> ..$ PC1: chr "Complex object1"
#> ..$ PC4: chr "Complex object4"
#> $ :List of 2
#> ..$ PC1: chr "Complex object1"
#> ..$ PC5: chr "Complex object5"
#> $ :List of 2
#> ..$ PC2: chr "Complex object2"
#> ..$ PC3: chr "Complex object3"
#> $ :List of 2
#> ..$ PC2: chr "Complex object2"
#> ..$ PC4: chr "Complex object4"
#> $ :List of 2
#> ..$ PC2: chr "Complex object2"
#> ..$ PC5: chr "Complex object5"
#> $ :List of 2
#> ..$ PC3: chr "Complex object3"
#> ..$ PC4: chr "Complex object4"
#> $ :List of 2
#> ..$ PC3: chr "Complex object3"
#> ..$ PC5: chr "Complex object5"
#> $ :List of 2
#> ..$ PC4: chr "Complex object4"
#> ..$ PC5: chr "Complex object5"
Итак, чтобы получить доступ к первому сопряжению объектов, я бы сделал:
all_combos[[1]]
#> $PC1
#> [1] "Complex object1"
#>
#> $PC2
#> [1] "Complex object2"