有没有办法用更简单的R语言编写这段代码?
也许使用apply
?
感谢您的任何提示。
for(i in 1:nrow(mat1)){
mat1$c8[i] = formula(mat1$c1[i], mat1$c2[i], mat1$c3[i], mat1$c4[i], mat1$c5[i], mat1$c6[i], mat1$c7[i])
}
数据:
mat <- data.frame(c1 = sample(1:3, 100, replace = TRUE),
c2 = sample(1:4, 100, replace = TRUE),
c3 = sample(1:2, 100, replace = TRUE),
c4 = sample(1:2, 100, replace = TRUE),
c5 = sample(0:1, 100, replace = TRUE),
c6 = sample(0:1, 100, replace = TRUE),
c7 = sample(0:1, 100, replace = TRUE))
mat1 <- mat
mat1
看起来你想做的事情有些不寻常,但如果你坚持这样做,你需要的是Map()
或mapply()
。这些函数将使用多个输入向量多次调用函数,将输出组合在一个列表(Map()
(或最简单的输出(mapply()
(中。
mat$c8 <- Map(formula, mat$c1, mat$c2, mat$c3, mat$c4,
mat$c5, mat$c6, mat$c7)
你也可以把它们全部卷成一行,尽管我认为上面更好地传达了你想要完成的事情。
mat$c8 <- do.call(Map, c(list(formula), mat))
有关lapply()
系列的详细概述,Advanced R的函数章节非常好。