我有两个列表,我必须在这些列表中使用git rev-list --reverse something-begin..something-end . | git cherry-pick --stdin
和for
条件作为我的函数。然后我决定使用if
函数。我使用lapply
函数,但我的代码变得如此困难而且无法工作。如何让我的代码以简单的方式工作。是否有一种不使用许多lapply
函数的好方法。
我的代码的想法:
lapply
。> 0
。 如果是> 0
则:
检查第二个列表的值。
最后的步骤必须应用于我拥有的所有列表。
这是我的代码:
该功能给了我> 0
NULL
我的功能将包括许多条件将延伸的条件。例如,
nx <- list(1, 1) ## if my list > 0 then check it
x.t <- list(c(2, 3, 4, 4), c(2, 4, 5, 6)) #the list to apply if statement on it.
lapply(nx, function(x) if (x > 0) {
do.t <- lapply(x.t, function(x) { which(x %in% c(2, 7:10))})
##check the values of my list.
lapply(nx, function(x){
lapply(1:length(x), function(i){ for (j in 1:x[[i]]){ ## here I would like j from 1 to length of x where x is a list of two elements.
if (x.t[[i]][do.t[[j]]] == 2) ## here I want to have a condition says that, if the element of each list is equal 2 then this element will have the value 2.5.
x.t[[i]] <- 2.5
}})})})
等等。
结果。
if (x.t[[i]][do.t[[j]]] == 2){
x.t[[i]] <- 2.5
}else{ some condition}elese{other condtion}
我的功能非常复杂,因此我提供此示例与我原来的功能非常相似。
答案 0 :(得分:1)
作为一般功能,将代码分成几部分可能会更好,每一部分只做一件事。
请注意,lapply
将整个向量(列表x.t
的元素)传递给函数。然后,complicated
遍历向量的元素,一次处理一个。
complicated <- function(x){
for(i in seq_along(x)){
if(x[i] > 0){
if(x[i] == 2)
x[i] <- 2.5
}
}
x
}
x.t.2 <- lapply(x.t, function(x){
x <- complicated(x)
x
})
x.t.2
#[[1]]
#[1] 2.5 3.0 4.0 4.0
#
#[[2]]
#[1] 2.5 4.0 5.0 6.0