gpt4 book ai didi

r - 替换、评估、bquote、do.call ... 替换表达式的一些指导

转载 作者:行者123 更新时间:2023-12-03 19:01:02 27 4
gpt4 key购买 nike

我想编写一个时间序列类(class)。这个想法是我用表达式和其他一些时间序列对象实例化一个对象,例如

(两个时间序列)

x <- ts(rnorm(10), frequency = 4, start = c(1959, 2))  
y <- ts(rnorm(10), frequency = 4, start = c(1959, 2))

(时间序列,定义为 x 和 y 的总和)
z <- exprTs("x+y", parents=list(x=x, y=y)) 

(获取该系列的一部分)
window(z, start=1960, end=1960.75)

问题是,我如何评估表达式?我尝试了以下方法:
#(constructor for class)  
exprTs <- function(expr, parents) {
res = list(expr=expr, parents=parents)
class(res) <- "exprTs"
res
}

#(window method)
window.exprTs <- function(z, ...) {
eval(substitute(z$expr, lapply(z$parents, window, ...)))
#do.call(z$expr, lapply(z$parents, window, ...))
}

我无法让窗口方法起作用。

如果您能指导我如何适本地使用替代、评估、do.call,那将非常有帮助。

最佳答案

你可能会以错误的方式思考这个问题,只是把事情复杂化了。已经为 ts 定义了一个附加项对象:

R> set.seed(42)
R> x <- ts(rnorm(10), frequency = 4, start = c(1959, 2))
R> y <- ts(rnorm(10), frequency = 4, start = c(1959, 2))
R> z <- x + y
R> cbind(x,y,z)
x y z
1959 Q2 1.37096 1.3049 2.6758
1959 Q3 -0.56470 2.2866 1.7219
1959 Q4 0.36313 -1.3889 -1.0257
1960 Q1 0.63286 -0.2788 0.3541
1960 Q2 0.40427 -0.1333 0.2709
1960 Q3 -0.10612 0.6360 0.5298
1960 Q4 1.51152 -0.2843 1.2273
1961 Q1 -0.09466 -2.6565 -2.7511
1961 Q2 2.01842 -2.4405 -0.4220
1961 Q3 -0.06271 1.3201 1.2574
R>

您实际上并不需要表达式解析器来对 R 对象进行操作。

关于r - 替换、评估、bquote、do.call ... 替换表达式的一些指导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2113855/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com