r - 如何在 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 中做到这一点?
解决方案
提取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
语法,因为我们需要将两个表达式与&
. 此外,当我们对元素进行检查时all
,list
我们可能需要在两个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
}
}
推荐阅读
- css - 如何在Angular 6+中使mat-form-field-underline 0的高度
- java - 从单词到字符的 Ngram 生成
- python - 如何使用 python 拆分 input_data?
- javascript - 使用 Function.call(this, arg1) 导致 this 未定义
- python - 在 Windows 10 上的 Python 3.7 上使用 Colorama
- android - BottomSheetDialogFragment 内存泄漏(使用leakcanary)
- scala - 使用 spark scala 读取每一行的第二个单词
- html - 如何在 ng-model 名称中添加动态文本
- r - 带有纬度和经度点的世界地图图
- python - Python - x 轴标签不与刻度线对齐