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

时间:2017-03-24 00:31:36

标签: r for-loop 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系列的功能?

1 个答案:

答案 0 :(得分:2)

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

在以下解决方案中L3LLLout4out4aout5都是相同的。

1)重复提供

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)循环 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)magrittr变异

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