我想懒惰地读取来自不同文本文件的数据,类似于延迟加载数据集(例如,iris
在R中输入懒惰加载来自datasets
包的数据集).这里的不同之处在于,expression
只要某个变量(这里我使用x
)被输入R控制台或被其他一些代码使用,我就想运行一个R.
# The expression that I want run if the variable x is called by some other code
expn = quote( {x = read.table(text = "a b \n 1 2", header=TRUE)} )
# When I type this, I want the language object 'expn' to be evaluated
# (e.g. eval(expn)) so that the variable x now exists
x
Run Code Online (Sandbox Code Playgroud)
有没有办法用R promise对象做到这一点?我必须创建一个R包来获得这种行为吗?
Mat*_*rde 10
你在找delayedAssign
.
delayedAssign('x', read.table(text = "a b \n 1 2", header=TRUE))
Run Code Online (Sandbox Code Playgroud)
您可以看到表达式在x
首次请求时执行:
delayedAssign('x', {
message('assigning')
read.table(text = "a b \n 1 2", header=TRUE)
})
x
# assigning
# a b
# 1 1 2
Run Code Online (Sandbox Code Playgroud)