在我的R
代码中,我使用的变量mydata1, mydata2, mydata3, …, mydataN
是function1()
的商店结果:
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
系列的功能?
答案 0 :(得分:2)
为了使这个具体和可运行的定义初始列表,L0
和最后的注释中使用的函数。
在以下解决方案中L3
,LL
,L
,out4
,out4a
和out5
都是相同的。
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