从列表中提取数据帧的功能不提供任何输出

时间:2014-11-22 04:03:44

标签: r

我不确定为什么我的功能不起作用。它加载到环境中,但在我使用它时它什么都不返回。我认为问题可能是我没有指定" return"争论,但我不确定应该放在哪里或如何放置?谢谢你的帮助。

在使用split函数对较大的数据框进行子集之后,我想用这个函数从列表中提取数据帧。

extractDF<- function(x) {
  dfname<-names(x)
  n<-length(x)
  for (i in 1:n) {
    nam <- dfname[i]
    assign (nam, data.frame(x[i]))
  }
}

当我在一个函数之外使用这个循环时,它可以正常工作。这是工作循环......

dfname<-names(SubPop)
n<-length(dfname)
for (i in 1:n) {
  nam <- dfname[i]
  assign (nam, data.frame(SubPop[i]))
}

1 个答案:

答案 0 :(得分:0)

funtion似乎append列表中不同数据集的nameslist envir=.GlobalEnv。如果是这种情况,请在assign

中使用extractDF<- function(x) { dfname<-names(x) n<-length(x) for (i in 1:n) { nam <- dfname[i] assign (nam, data.frame(x[i]), envir=.GlobalEnv) } } extractDF(SubPop)
df1

现在,检查df2colnamescolnames(df1) #[1] "df1.Species8" "df1.Species4" "df1.Species1" "df1.Species5" "df1.Species7" #[6] "df1.Species6" colnames(df2) #[1] "df2.Species4" "df2.Species7" "df2.Species5" "df2.Species10" #[5] "df2.Species1" "df2.Species2" "df2.Species6" "df2.Species8" 已更改。

colnames

更新

如果您不想修改list2env(setNames(SubPop, ls(pattern="^df\\d+")), envir=.GlobalEnv) 并假设该功能只是为了提取列表中的修改数据集(来自其他分析),您可以这样做:

setNames

在这里,我使用SubPop来命名set.seed(22) df1 <- as.data.frame(matrix(sample(0:1, 10*6, replace=TRUE), ncol=6, dimnames=list(NULL, sample(paste0("Species", 1:10), 6, replace=FALSE)))) set.seed(35) df2 <- as.data.frame(matrix(sample(0:1, 10*8, replace=TRUE), ncol=8, dimnames=list(NULL, sample(paste0("Species", 1:10),8 , replace=FALSE)))) SubPop <- list(df1, df2) names(SubPop) <- c('df1', 'df2') dfname<-names(SubPop) 列表元素(如果它未命名)。

数据

{{1}}