Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从R输出创建数据帧_R - Fatal编程技术网

如何从R输出创建数据帧

如何从R输出创建数据帧,r,R,我正在尝试从多个操作的输出创建一个数据集。但我不知道如何实现自动化。复制函数很好,但要获得单个新数据点,需要执行多个操作,即调整后的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~V

我正在尝试从多个操作的输出创建一个数据集。但我不知道如何实现自动化。复制函数很好,但要获得单个新数据点,需要执行多个操作,即调整后的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
??????????????
#使用随机数据制作数据帧

A只需将其包装在
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
}

df复制功能将正常工作。首先,编写一个函数来执行模拟的一次迭代

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))
}

one.sim在5个数据帧上应用线性模型

使用
复制
,它将类似于

> 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
您也可以使用
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
>sapply(序号(5),函数(x){

A您就快到了…
replicate
可以正常工作。只需将两个摘要输出包装在
c()
replicate(100,{我想做的事情;c(summary(lm(formula=V1~V2,data=A))$fstatistic[1],summary(lm(formula=V1~V2,data=A))$adj.r.squared)}
> 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(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