R 彼此内部的lappy函数无法按预期工作
我有两个列表,我必须对这些列表中的函数使用R 彼此内部的lappy函数无法按预期工作,r,R,我有两个列表,我必须对这些列表中的函数使用和if条件。然后我决定使用lappy函数。我使用了lappy函数,但我的代码变得非常困难,无法工作。如何使代码以简单的方式工作。有没有一种好方法可以避免使用许多lappy函数 我的代码的想法: 首先,我有一些清单 这些列表不需要全部相同的长度,甚至不需要全部>0 所以,我的代码检查每个列表。是否为>0 如果是>0,则: 检查第二个列表的值 如果值等于特定值,则该值将更改为新值 最后的步骤必须适用于我拥有的所有列表 这是我的密码: 函数给了我NULL nx
和if
条件。然后我决定使用lappy
函数。我使用了lappy
函数,但我的代码变得非常困难,无法工作。如何使代码以简单的方式工作。有没有一种好方法可以避免使用许多lappy
函数
我的代码的想法:
首先,我有一些清单李>
这些列表不需要全部相同的长度,甚至不需要全部>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
}})})})
我的函数非常复杂,因此我提供的示例与我的原始函数非常相似 作为一个通用函数,也许最好将代码分成几个部分,每个部分只做一件事。
请注意,lappy
将整个向量、列表的元素x.t
传递给函数。然后,complex
循环遍历向量的元素,一次处理一个元素
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
0){
如果(x[i]==2)
x[i]您正在使用i
,但没有为其指定任何值。是的,但如何解决此问题。我使用了另一个lappy
,但不起作用。我不清楚您要做什么。我只想看看我的列表是否为>0
,然后基于此应用条件。是否要更改相等的值到2到2.5?非常感谢您的帮助。但是,我必须像我一样使用for
和'if'。这是因为我的函数包含许多列表,并且值各不相同。也就是说,x.t[[I]]@F.family好的,我将编辑答案以给出一个更复杂的示例。非常感谢。我真的非常感谢您的帮助。我可以将其作为一个函数来完成吗?因为我有一个包装函数,我需要从这些函数中调用值。这将非常复杂。@F.family是的,我相信您可以。调用函数是可能的,甚至是自然的从函数内部。这称为结构化编程:)
[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
NULL
[[1]][[2]]
[[1]][[2]][[1]]
NULL
[[2]]
[[2]][[1]]
[[2]][[1]][[1]]
NULL
[[2]][[2]]
[[2]][[2]][[1]]
NULL
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