我的预感是这是对R
语言的滥用,并且有充分的理由不会发生这种情况。但我发现这是我试图调试的代码中潜在错误的永久来源:
MWE
list.1 <- list(a=1,b=2,c=list(d=3))
list.2 <- list(b=4,c=list(d=6,e=7))
input.values <- list(list.1,list.2)
do.something.to.a.list <- function(a.list) {
a.list$b <- a.list$c$d + a.list$a
a.list
}
experiment.results <- lapply(input.values,do.something.to.a.list)
use.results.in.some.other.mission.critical.way <- function(result) {
result <- result^2
patient.would.survive.operation <- mean(c(-5,result)) >= -5
if(patient.would.survive.operation) {
print("Congrats, the patient would survive! Good job developing a safe procedure.")
} else {
print("Sorry, the patient won't make it.")
}
}
lapply(experiment.results, function(x)
use.results.in.some.other.mission.critical.way(x$b))
是的,我知道这是一个愚蠢的例子,我可以在尝试访问它之前添加一个元素是否存在的检查。但我并不是要知道我能做什么,如果我一直都有完美的记忆和意识,慢慢地解决这个功能不方便并让我很头疼的事实。我试图完全避免头痛,也许是以代码速度为代价。
所以:我想知道的是...
(a) 是否有可能做到这一点。我最初的尝试失败了,我被困在试图阅读C
“$”的内部以了解如何正确处理参数
(b) 如果是这样,是否有充分的理由不(或不)这样做。
基本上,我的想法是,与其编写每个依赖于从列表访问中返回的非 null 的函数来仔细检查,我可以只编写一个函数来仔细检查并相信其余函数不会被调用未满足的先决条件 b/c 失败的列表访问将快速失败。