在R中用替代品嵌套lapply

问题描述 投票:1回答:1

我创建了使用不同变量多次运行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)))))

但是这会导致错误:

替换错误(scale(DV)~scale(IV)+ scale(qsec),list(DV = as.name(x)),: unused arguments(list(IV = as.name(X [[i]]) ),data = mtcars)

如何使这个嵌套循环工作?

r nested lapply lm
1个回答
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)}))
© www.soinside.com 2019 - 2024. All rights reserved.