在R

时间:2019-03-05 04:33:07

标签: r nested lapply lm

我创建了使用不同的变量多次运行lm命令的代码:

DVs <- c('mpg', 'wt')

lapply(DVs, function(x)
  lm(substitute(scale(DV) ~ scale(disp)+scale(qsec), list(DV = as.name(x))), data=mtcars))

但是,我希望能够创建一个嵌套循环,以遍历另一个变量。我曾经尝试过的代码是:

DVs <- c('mpg', 'wt')
IVs <- c('disp', 'hp')

    lapply(DVs, function(x) lapply(IVs, function(y)
      lm(substitute(substitute(scale(DV) ~ scale(IV)+scale(qsec), list(DV = as.name(x)), list(IV = as.name(y)), data=mtcars)))))

但是这会导致错误:

  

替换错误(标度(DV)〜标度(IV)+标度(qsec),列表(DV =   as.name(x)),:未使用的参数(list(IV = as.name(X [[i]]])),data =   mtcars)

如何使此嵌套循环起作用?

1 个答案:

答案 0 :(得分:0)

感谢Josh O'Brien的建议!这可行:

DVs <- c('mpg', 'wt')
IVs <- c('disp', 'hp')

lapply(DVs, function(x) lapply(IVs, function(y) {lm(reformulate(response=x, termlabels=y), data=mtcars)}))

我不知道如何在通话中缩放数据,但我只能缩放整个数据框:

mtcarsSC <- as.data.frame(scale(mtcars))

DVs <- c('mpg', 'wt')
IVs <- c('disp', 'hp')

lapply(DVs, function(x) lapply(IVs, function(y) {lm(reformulate(response=x, termlabels=y), data=mtcarsSC)}))