AFAIK,任何NULL的子集,例如R中的NULL[1]
都将再次返回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
)
其中函数的任何参数(arg)都可以为NULL。
它可以节省大量的运行时间,而不是评估复杂的计算,但我认为我无法通过在列表创建中测试if (is.null(arg))
来绕过评估。惰性评估不适用于此吗?还有其他解决方案可以避免评估吗?