首页 > 解决方案 > 如何在 R 中使用带有列表的 if 语句

问题描述

我有两个项目的清单。我想使用该if语句设置条件。条件也需要包含all语句。

换句话说,

假设我有以下列表:

library(VineCopula)
x <- BiCop(0,0)
y <- BiCop(0,0)
z <- list(x, y)

我想有一个条件,说如果所有的都z[[i]]$tau小于或大于某个特定的值,那么z就必须设置为零。

这是我的代码(请注意,我的列表可以有任何长度。即长度不固定。这里,我将长度固定为两个元素,但我的真实数据需要大于2。):

     for (i in seq_len(m)){
  if (all( 0 <= z[[i]]$tau =< 0.15))
    z <- 0
}

如何在 R 中做到这一点?

标签: r

解决方案


提取list元素,用all逻辑条件换行以返回单个TRUE/FALSE,使用它 in if,循环 'z' 并将tau元素分配给 0

tau1 <- sapply(z, "[[", "tau") 
i1 <- all(tau1 >= 0 & tau1 <= 0.15)
if(i1) {
   z <- lapply(z, function(x) {x$tau <- 0; x})
}

语法0 <= z[[i]]$tau =< 0.15似乎是数学上的,这不是正确的R语法,因为我们需要将两个表达式与&. 此外,当我们对元素进行检查时alllist我们可能需要在两个for循环中执行此操作(如果for使用循环) - 第一个检查是否all满足条件,第二个进行分配(以防第一个返回 TRUE) IE

i1 <- TRUE
# // first loop
for(i in seq_along(z)) {
     i1 <- i1 & z[[i]]$tau >= 0 & z[[i]]$tau <= 0.15
}
# // second loop
if(i1) {
   for(i in seq_along(z)) {
        z[[i]]$tau <- 0
     }
}

推荐阅读