如何使代码更具可读性(for-loop 或 apply)

How to make the code more readable (for-loop or apply)

在我的 R 代码中,我使用的变量 mydata1, mydata2, mydata3, …, mydataNfunction1():

的存储结果
mydata1 <- function1() 
mydata2 <- function1()
mydata3 <- function1()
#…
mydataN <- function1()

变量mydata1, mydata2, mydata3, …, mydataN可以是向量、矩阵或data.frames。

稍后我将变量 mydata1, mydata2, mydata3, …, mydataN 作为 function2() 的输入值传递并将结果保存在新变量 newmydata1, newmydata2, …, newmydata1:

newmydata1<- function2(mydata1) 
newmydata2<- function2(mydata2)
newmydata3<- function2(mydata3)
#…
newmydataN<- function2(mydataN)

我现在计算前的数N

问题。如何使代码更实用和可读? 我应该使用 for-loop 还是 apply 系列的函数?

为了使这个具体且可运行,定义初始列表,L0 和最后注释中使用的函数。

下面的解L3LLLout4out4aout5都是一样的

1) 重复lapply

L1 <- lapply(L0, function1)
L2 <- lapply(L1, function2)
L3 <- lapply(L2, function3)

2) 减少

FL <- list(function1, function2, function3)
LL <- Reduce(lapply, FL, init = L0)

3) loop FL 如(2).

L <- L0
for(f in FL) L <- Map(f, L)    # or for(f in FL) L <- lapply(L, f)

4) magrittr

library(magrittr)

L0 %>% lapply(function1) %>% lapply(function2) %>% lapply(function3) -> out4

4a) 磁力变化

library(magrittr)

L0 %>% lapply(. %>% function1 %>% function2 %>% function3) -> out4a

5) functional::Compose

library(functional)

out5 <- Map(Compose(function1, function2, function3), L0)

注意: 使用的输入:

L0 <- as.list(1:4)
function1 <- function(x) x+1
function2 <- function(x) 2*x
function3 <- function(x) x^2