AFAIK, любое подмножество NULL, например NULL[1]
в R, снова вернет NULL.Кажется, однако, что R все еще оценивает часть, используемую для поднабора:
system.time(NULL[1])
user system elapsed
0 0 0
system.time(sample(1e7))
user system elapsed
0.582 0.010 0.598
system.time(NULL[sample(1e7)])
user system elapsed
0.575 0.011 0.594
Я использую это в контексте создания списка внутри функции, как в
l <- list(
var1 = arg1[eval of complex calculation 1]
var2 = arg2[eval of complex calculation 2]
...etc
)
, гделюбой из аргументов (аргумент) функции может быть NULL.
Это сэкономило бы много рабочего времени, не оценивая сложные вычисления, но я думаю, что не могу обойти оценку, проверяя if (is.null(arg))
при создании списка.Разве ленивая оценка здесь не применима?Есть ли другое решение, чтобы избежать оценки?