如何使代码更具可读性(for-loop 或 apply)
How to make the code more readable (for-loop or apply)
在我的 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
系列的函数?
为了使这个具体且可运行,定义初始列表,L0
和最后注释中使用的函数。
下面的解L3
、LL
、L
、out4
、out4a
和out5
都是一样的
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
在我的 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
系列的函数?
为了使这个具体且可运行,定义初始列表,L0
和最后注释中使用的函数。
下面的解L3
、LL
、L
、out4
、out4a
和out5
都是一样的
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