#r
Вопрос:
У меня есть список из двух пунктов. Я хотел бы установить условие, используя 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?
Ответ №1:
Извлеките list
элемент, оберните с all
помощью логического условия , чтобы вернуть один TRUE/FALSE
, используйте это в if
, повторите цикл над » z » и присвоите tau
элементам значение 0
tau1 <- sapply(z, "[[", "tau")
i1 <- all(tau1 >= 0 amp; tau1 <= 0.15)
if(i1) {
z <- lapply(z, function(x) {x$tau <- 0; x})
}
Синтаксис 0 <= z[[i]]$tau =< 0.15
, по-видимому, математический, что не является правильным R
синтаксисом, так как нам нужно объединить два выражения amp;
. Кроме того, поскольку мы выполняем проверку all
list
элементов, нам, возможно, потребуется сделать это в два for
цикла (если for
используется цикл) — первый для проверки all
соответствия условию и второй для выполнения задания (в случае, если первый вернул значение TRUE), т. е.
i1 <- TRUE
# // first loop
for(i in seq_along(z)) {
i1 <- i1 amp; z[[i]]$tau >= 0 amp; z[[i]]$tau <= 0.15
}
# // second loop
if(i1) {
for(i in seq_along(z)) {
z[[i]]$tau <- 0
}
}
Комментарии:
1. Большое спасибо. Я действительно ценю это. Да, я использую
for
цикл.2. @Maryam спасибо. Я обновил с
for
помощью цикла