[英]How to create a data frame from R output
我正在尝试从多个操作的输出创建数据集。 但是我不知道该如何自动化。 复制函数会很好,但是要获取单个新数据点需要执行多个操作,即调整后的R平方和F统计量。
R代码:
#make dataframe with random data
A<-as.integer(round(runif(20, min=1, max=10)))
dim(A) <- c(10,2)
A<-as.data.frame(A)
#extract F-statistic
summary(lm(formula=V1~V2,data=A))$fstatistic[1]
#extract adjusted R squared
summary(lm(formula=V1~V2,data=A))$adj.r.squared
#repeat 100 times and make a dataframe of the unique extracted output, e.g. 2 columns 100 rows
??????????????
将线性模型应用于5个数据框...
与replicate
,这将是像
> replicate(5, {
A <- data.frame(rnorm(5), rexp(5))
m <- lm(formula = A[,1] ~ A[,2], data = A)
c(f = summary(m)$fstatistic[1], adjR = summary(m)$adj.r.squared)
})
## [,1] [,2] [,3] [,4] [,5]
## f.value 0.4337426 1.3524681 1.17570087 3.8537837 0.04583862
## adjR -0.1649097 0.0809812 0.04207698 0.4163808 -0.31326721
您可以使用t()
将其包装起来以获得长格式矩阵。
您还可以使用广受欢迎的do.call(rbind, lapply(...))
方法,
> do.call(rbind, lapply(seq(5), function(x){
A <- data.frame(rnorm(5), rexp(5))
m <- lm(formula = A[,1] ~ A[,2], data = A)
c(f = summary(m)$fstatistic[1], adjR = summary(m)$adj.r.squared)
}))
## f.value adjR
## [1,] 1.9820243 0.19711351
## [2,] 21.6698543 0.83785879
## [3,] 4.4484639 0.46297652
## [4,] 0.9084373 -0.02342693
## [5,] 0.0388510 -0.31628698
您也可以使用sapply
,
> sapply(seq(5), function(x){
A <- data.frame(rnorm(5), rexp(5))
m <- lm(formula = A[,1] ~ A[,2], data = A)
c(f = summary(m)$fstatistic[1], adjR = summary(m)$adj.r.squared)
})
## [,1] [,2] [,3] [,4] [,5]
## f.value 0.07245221 0.2076504 0.0003488657 58.5524139 0.92170453
## adjR -0.30189169 -0.2470187 -0.3331783000 0.9350147 -0.01996465
请记住,所有这些都返回一个matrix
,因此,如果您想要一个data.frame
结果,则as.data.frame
包装器可能是合适的。
只需将其包装在for
循环中即可。
df <- as.data.frame(matrix(0, 100, 2))
for (i in 1:100){
A<-as.integer(round(runif(20, min=1, max=10)))
dim(A) <- c(10,2)
A<-as.data.frame(A)
#extract F-statistic
df[i, 1] <- summary(lm(formula=V1~V2,data=A))$fstatistic[1]
#extract adjusted R squared
df[i, 2] <- summary(lm(formula=V1~V2,data=A))$adj.r.squared
}
中提琴。
replicate
功能将正常工作。 首先,编写一个函数进行一次仿真迭代。
one.sim <- function() {
A <- matrix(as.integer(runif(20, min=1, max=10)), nrow=10)
A <- as.data.frame(A)
m1.summary <- summary(lm(V1 ~ V2, data=A))
return(c(fstatistic=unname(m1.summary$fstatistic[1]),
adj.r.squared=m1.summary$adj.r.squared))
}
然后在复制中使用此函数:
results <- t(replicate(100, one.sim()))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.