lapply
比 for 循环更快,并且执行相同的技巧:
首先定义一个带有波长名称的向量。准确地做到这一点很困难,因为您没有包含示例数据。
wavs <- c("X350", "X...", "X...",...)
由于您有这么多波长,您可能不想手动执行此操作。包括您的数据示例,因此更容易提供建议,但假设您将它们作为数据框的列(从 X350 猜测):
require(reshape2)
wavdata <- melt(mydata, id = "structure")
wavs <- levels(wavdata$variable)
然后你可以继续循环:
mods <- lapply(wavs, function(i) {
x <- subset(wavdata, variable == wavs)
mod_structure1 <- lm(variable ~ value, data=x)
anova(mod_structure1)})
这为您提供了令人难以置信的 ANOVA 列表,因此请做好准备。将相关参数从这些 ANOVA 获取到 data.frame 可能会更好,这样更容易处理。
mod.data <- lapply(wavs, function(i) {
x <- subset(wavdata, variable == wavs)
mod_structure1 <- lm(variable ~ value, data=x)
tmp <- anova(mod_structure1)
data.frame(Df = tmp$Df[[1]], F = tmp$F[[1]], p = tmp$P[[1]])
})
do.call(rbind, mod.data)
该代码未经测试,可能包含错误。但是,您可以根据其背后的想法生成自己的想法。