我有很多8208行的数据帧,并希望将每个数据帧分成19个数据帧,每个数据帧有432行。我分配了以下功能:
splitter <- function(x) {
a <- x[1:432,]
b <- x[433:864,]
c <- x[865:1296,]
d <- x[1297:1728,]
e<- x[1729:2160,]
f <- x[2161:2592,]
g <- x[2593:3024,]
h <- x[3025:3456,]
i <- x[3457:3888,]
j <- x[3889:4320,]
k <- x[4321:4752,]
l <- x[4753:5184,]
m <- x[5185:5616,]
n <- x[5617:6048,]
o <- x[6049:6480,]
p <- x[6481:6912,]
q <- x[6913:7344,]
r <- x[7345:7776,]
s <- x[7777:8208,]
assign(paste0('1',x), a, envir = globalenv())
assign(paste0('2',x), b, envir = globalenv())
assign(paste0('3',x), c, envir = globalenv())
assign(paste0('4',x), d, envir = globalenv())
assign(paste0('5',x), e, envir = globalenv())
assign(paste0('6',x), f, envir = globalenv())
assign(paste0('7',x), g, envir = globalenv())
assign(paste0('8',x), h, envir = globalenv())
assign(paste0('9',x), i, envir = globalenv())
assign(paste0('10',x), j, envir = globalenv())
assign(paste0('11',x), k, envir = globalenv())
assign(paste0('12',x), l, envir = globalenv())
assign(paste0('13',x), m, envir = globalenv())
assign(paste0('14',x), n, envir = globalenv())
assign(paste0('15',x), o, envir = globalenv())
assign(paste0('16',x), p, envir = globalenv())
assign(paste0('17',x), q, envir = globalenv())
assign(paste0('18',x), r, envir = globalenv())
assign(paste0('19',x), s, envir = globalenv())}
当我在数据帧上尝试代码时,收到错误消息:
分配错误(paste0(“1”,x),a,envir = globalenv()): 变量名限制为10000字节 另外:警告信息: 在assign(paste0(“1”,x),a,envir = globalenv())中: 只有第一个元素用作变量名称
答案 0 :(得分:0)
特别是关于为每个数据框对象分配名称的代码,您要粘贴数字和整个“x”。这是您获得字节数和元素警告的错误。如果您想坚持使用当前代码,可以将paste0("1",x)
替换为paste0("df1")
。
尽管如此,要诚实
assign(x, value, pos = -1, envir = as.environment(pos),inherits = FALSE, immediate = TRUE)
要求x
作为字符串传递,您只需将其定义为:
assign("df1", a, envir = globalenv())
您的解决方案并不是最优雅的,如果您需要对数据进行更“随机”的拆分,我建议使用其他方法,每个lmo。像 -
这样的东西splitter<-function(x,groups=10){
dd<-as.data.frame(x)
dd$split<-sample(groups,size=nrow(dd),replace=T)
for(i in 1:groups){
ddd<-dd[dd$split==i,]
assign(paste0("X",i),ddd,envir=globalenv())
}
}
splitter(data.set,10)
你可以通过消除循环来逃避,但这是由你来决定的。请注意上面的代码,数据框大小不会完全相等,但应该在行中接近相等...