运行一个函数,该函数在每个中间步骤中重命名数据框,以获取数据框列表

时间:2019-05-04 13:00:38

标签: r list function dataframe lapply

我已经获得了使用纯素食包(关于DCA)在R中进行分析的说明。

关于单个数据框的说明非常简单,但是我想将分析应用于一组数据框。

我知道这可以使用for循环或lapplysapply来完成,但是我很难处理这样一个事实,即分析的每个步骤都将新扩展名添加到数据框。

下面的示例

说我有一个数据帧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 :(得分:0)

除非您的数据帧数量非常有限,否则我不建议定义ca。全局环境中每个数据框有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