我有一个列表对象,其中包含多个列表,每个列表中包含相同的返回对象。以下列表是此版本的简短版本。
loopdone "wget -c http://my.url/"
我想创建两个向量:一个向量(success_true),如果第一个元素的内容等于true,则包含每个列表的第二个元素的内容;一个向量(succes_false)包含第二个元素的内容如果第一个元素的内容等于false,则为每个列表。我正在寻找的结果如下:
logs <- list(list(success = TRUE, details = "check", timestamp = as.Date("2017-10-06")),
list(success = FALSE, details = "uncheck", timestamp = as.Date("2017-10-07")),
list(success = FALSE, details = "check", timestamp = as.Date("2017-10-08")),
list(success = FALSE, details = "uncheck", timestamp = as.Date("2017-10-09")))
Shaun Wilkinson提出的解决方案很有效。
success_true <- c("check")
succes_false <- c("uncheck", "check", "uncheck")
我还提出了另一种解决方案,它在for循环中包含一个条件语句。
# Solution number 1 by Shaun Wilkinson: sapply
successes <- sapply(logs, function(e) e$success)
details <- sapply(logs, function(e) e$details)
success_true <- details[successes]
success_false <- details[!successes]
答案 0 :(得分:1)
试试这个:
successes <- sapply(logs, function(e) e$success)
details <- sapply(logs, function(e) e$details)
success_true <- details[successes]
success_false <- details[!successes]
答案 1 :(得分:0)
除了Shauns的答案之外,我还找到了另一个在for循环中包含条件语句的解决方案。我认为这个解决方案可以提供更大的灵活性,因此是我将要使用的解决方案。
success_true <- c() #create two vectors
success_false <- c()
for (log in logs) {
if (log$success == TRUE) {
success_true <- c(success_true, log$details) #add content of details element to the success_true vector if the condition is met
} else {
success_false <- c(succes_false, log$details) #add content of details element to the success_false vector if the condition is met
}
}