R - 在循环中

时间:2015-11-23 23:28:03

标签: r string function loops subset

问:如何在函数或循环中对变化变量的子集进行子集化?

假设我有以下代码来确定多个数据集的回归统计数据:

dat1 <- data.frame(col1=1:5,col2=6:10)
dat2 <- data.frame(col1=11:15,col2=16:20)
func <- function(data,col.no){
  get(data)[,col.no]
}

for(i in c('dat1','dat2')) {
  mod.name <- paste0('fit.',i)
  assign(mod.name,lm(get(i)[,1]~get(i)[,2]),envir = .GlobalEnv)
}

mod.pvals <- NULL
p.func <- function(attr.name) {
  for(i in c('dat1','dat2')) {
    mod.name <- paste0('fit.',i)
    p.val <- summary(get(mod.name))[attr.name]
    mod.pvals <- c(mod.pvals,p.val)
  }
mod.pvals
}

r.vals <- p.func('r.squared')
adj.r.vals <- p.func('adj.r.squared')
coef.vals <-  p.func('coefficients')

这适用于'r.squared','adj.r.squared'等。 但我想在同一个函数中访问模型的p值。

在函数之外我会选择:

summary(fit)$coefficients[2,4] 

但是如何在函数内里面

我没试成功:

summary(get(mod.name))['coefficients'][2,4]
Error in summary(get(mod.name))["coefficients"][[2, 4]] : 
  incorrect number of subscripts

然后我考虑在上面的函数中更改p.val的代码:

p.val <- paste0('summary(',mod.name ,')$',attr.name)
get(p.val)

但是当我运行代码时,我收到以下错误:

p.vals <- p.func('coefficients[2,4]')
Error in get(p.val) : 
  object 'summary(fit.dat1)$coefficients[2,4]' not found

我猜get()不能像这样工作。是否有一个函数可以用{<1}}代替{<1}}。

关于如何使这项工作的其他想法?

0 个答案:

没有答案