我不确定为什么我的功能不起作用。它加载到环境中,但在我使用它时它什么都不返回。我认为问题可能是我没有指定" 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]))
}
答案 0 :(得分:0)
funtion
似乎append
列表中不同数据集的names
列list
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
现在,检查df2
和colnames
。 colnames(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}}