我已经获得了使用纯素食包(关于DCA)在R中进行分析的说明。
关于单个数据框的说明非常简单,但是我想将分析应用于一组数据框。
我知道这可以使用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等)来解决此问题?
编辑:分析后,我需要保留原始数据框,以便对其进行后续分析。
答案 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