例如,我有lm()
个模型输出的列表(以下是可复制的示例):
library(tidyverse)
mtcars
model1 <- lm(mpg ~ disp, data = mtcars)
model2 <- lm(mpg ~ disp + hp, data = mtcars)
models <- list(model1, model2)
models
哪个给出的列表如下:
[[1]]
Call:
lm(formula = mpg ~ disp, data = mtcars)
Coefficients:
(Intercept) disp
29.59985 -0.04122
[[2]]
Call:
lm(formula = mpg ~ disp + hp, data = mtcars)
Coefficients:
(Intercept) disp hp
30.73590 -0.03035 -0.02484
我可以使用map()
在列表中的所有模型上运行一个函数(例如AIC()
),例如:
map(.x = models, .f = AIC)
返回每个模型的值:
[[1]]
[1] 170.2094
[[2]]
[1] 168.6186
如何获取上面的输出(即AIC()函数的输出)并使用它在每个列表项内创建新列(即为每个模型创建AIC()输出的新列)? / p>
基本上,我正在尝试执行以下代码,但是使用map()
:
model1$AIC <- AIC(model1)
model2$AIC <- AIC(model2)
第一个优先选择的是整洁的map()
解决方案,但我对其他任何解决方案都很满意。
答案 0 :(得分:3)
我们可以使用map
new_model <- purrr::map(models, ~{.x$AIC = AIC(.x);.x})
new_model[[1]]$AIC
#[1] 170.2094
new_model[[2]]$AIC
#[1] 168.6186
类似地,我们也可以使用lapply
new_model <- lapply(models, function(x) {x$AIC = AIC(x);x})
答案 1 :(得分:1)
我们可以直接直接应用self.countDownTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.countDownTime), userInfo: nil, repeats: true);
func countDownTime() {
let now = Date();
let calendar = Calendar.current;
let comps = calendar.dateComponents(Set<Calendar.Component>([.minute, .second]), from: now, to: self.startTime);
var strMinute = "\(comps.minute!)";
var strSecond = "\(comps.second!)";
if (comps.minute! < 10) {
strMinute = "0\(comps.minute!)";
}
if (comps.second! < 10) {
strSecond = "0\(comps.second!)";
}
if (comps.minute! <= 0 && comps.second! <= 0) {
self.countDownTimer?.invalidate();
}
else {
self.lblCountDownTime.text = "\(strMinute):\(strSecond)\"";
}
}
AIC
如果我们需要更新“模型”
library(purrr)
map_dbl(models, AIC)
#[1] 170.2094 168.6186