R语言中有时需要在循环中生成一个向量,之后再把每一个循环的结果组成一个数据框。这个过程中可能遇到一个问题:向量生成方法只有x<-c(),没有name=xxx之类的参数,无法用paste0之类的函数循环生成多个不同名子的向量,这就造成了新的向量会覆盖掉旧的向量。这里提供几个可行的解决方法:
- 生成一个list,通过list[[i]]<-c()保存变量,之后再用as.data.frame()转化为数据框,例如:
x1 <- list()
for (i in (1:10)){
a <- c(rep(1,i-1),i:11)
x1[[i]] <- a
}
x2 <- as.data.frame(x1)
提前生成一个向量和数据框,之后每个循环都用rbind()或cbind()合并,这样最后也能得到一个数据框
-
提前预估生成的数据长宽,用matrix()生成一个全是NA的矩阵,转化成dataframe,然后赋值
(不直接对dataframe赋值是因为dataframe$i <-vector会报错,因为你生成的空dataframe跟输入的向量行数不同)
例如:
df1 <- data.frame(matrix(NA,nrow = 11,ncol = 11))
x1 <- list()
for (i in (1:10)){
a <- c(rep(1,i-1),i:11)
df1[i,] <- a
}
- 用write.csv()或者save()等函数保存下来,这些函数是有filename=“”之类的命名参数的,之后再批量读取