Запуск функции, которая переименовывает фреймы данных на каждом промежуточном шаге, для получения списка фреймов данных. - PullRequest
0 голосов
/ 04 мая 2019

Я получил инструкции сделать анализ в R с помощью пакета vegan (относительно DCA).

Инструкции на одном кадре данных довольно просты, но я хотел бы применить анализ к наборуфреймы данных.

Я знаю, что это можно сделать с помощью цикла for или lapply или sapply, но у меня возникают проблемы с тем фактом, что на каждом этапе анализа новое расширение добавляется к именикадра данных.

Пример ниже

Скажем, у меня есть фрейм данных DF, тогда он выглядит следующим образом:

DF.t1 <- decostand(DF, "total")
DF.t2 <- decostand(DF.t1, "max")
DF.t2.dca <- decorana(DF.t2)
DF.t2.dca.DW <- decorana(DF.t2, iweigh=1)
names(DF.t2.dca)
summary(DF.t2.dca)
DF.t2.dca.taxonscores <- scores(DF.t2.dca, display=c("species"), choices=c(1,2))
DF.t2.dca.taxonscores <- DF.t2.dca$cproj[ ,1:2]
DF.t2.dca.samplescores <- scores(DF.t2.dca, display=c("sites"), choices=1)

Чего я хочу достичьсостоит в том, чтобы провести через этот анализ несколько фреймов данных, не записывая их все по отдельности.

Допустим, у меня есть набор фреймов данных с именами "DF_1", "DF_2" и "DF_3", на которых я хочу провести этот анализ.

Мне, вероятно, нужно поместить кадры данных в список и получить все шаги в цикле for или в одном из методов apply.Но как мне подойти к проблеме с добавленными расширениями (.ra, .t1, .t2, .t2.dca, .t2.dca.DW и т. Д.) К именам фрейма данных?

Правка: Мне нужно сохранить исходные кадры данных после анализа, чтобы выполнить последующий анализ на них.

1 Ответ

0 голосов
/ 04 мая 2019

Если у вас очень ограниченное количество фреймов данных, я бы не советовал определять ок. 8 новых объектов для каждого фрейма данных в глобальной среде, поскольку это может стать очень грязным.

Один из подходов, который вы могли бы рассмотреть, - это создание вложенного списка, где первый уровень - это фрейм данных, а второй уровень - это модифицированные фреймы данных.

# some example data sets
DF1 <- mtcars
DF2 <- mtcars*2
DF3 <- mtcars*3

all_dfs <- list(DF1 = DF1, DF2 = DF2, DF3 =DF3)

some_stuff <- function(df) {
  DF.t1 <- decostand(df, "total")
  DF.t2 <- decostand(DF.t1, "max")
  DF.t2.dca <- decorana(DF.t2)
  DF.t2.dca.DW <- decorana(DF.t2, iweigh=1)
  names(DF.t2.dca)
  summary(DF.t2.dca)
  DF.t2.dca.taxonscores <- scores(DF.t2.dca, display=c("species"), choices=c(1,2))
  DF.t2.dca.taxonscores <- DF.t2.dca$cproj[ ,1:2]
  DF.t2.dca.samplescores <- scores(DF.t2.dca, display=c("sites"), choices=1)
  return(list(DF.t1 = DF.t1, DF.t2 = DF.t2, 
              DF.t2.dca = DF.t2.dca,
              DF.t2.dca.DW = DF.t2.dca.DW, 
              DF.t2.dca.taxonscores = DF.t2.dca.taxonscores, 
              DF.t2.dca.taxonscores = DF.t2.dca.taxonscores
              ))
}

nested_list <- lapply(all_dfs, some_stuff)

# To obtain any of the objects for a specific data.frame you could, for example, run
nested_list$DF1$DF.t2.dca.DW
...