gpt4 book ai didi

r - 将函数应用于 xts 对象

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

我假设一个具有以下值的 xts 对象(数据)...

           SPY.Adjusted     SMA
2012-08-02 136.64 137.115
2012-08-03 139.35 137.995
2012-08-06 139.62 139.485
2012-08-07 140.32 139.970
2012-08-08 140.49 140.405
2012-08-09 140.61 140.550
2012-08-10 140.84 140.725

如果满足某些条件,我正在尝试使用应用函数将信号附加到它...在这种情况下,当关闭 > SMA 时。我的功能:

signal<-function(x,y,z)
{
z$signals<-ifelse(x>y,1,0)
}

我试着...

apply(data,1,FUN=signal(data$SPY.Adjusted,data$SMA,data))

返回错误:

Error in match.fun(FUN) : 'signal(data$SPY.Adjusted, data$SMA, data)'
is not a function, character or symbol

可能出了什么问题?我向它传递了一个函数,如果满足特定条件,该函数会访问传递给它的对象数据以创建一个新列。

最佳答案

当您使用 MARGIN=1 调用 apply 时,就像将每一行传递给 FUN。您的函数已经矢量化,因此您不需要使用 apply。但是,您的函数不返回任何内容。试试这个:

library(quantmod)
getSymbols("SPY", src='yahoo', from='2010-01-01', to='2012-01-01')
dat <- cbind(Ad(SPY), SMA=SMA(Ad(SPY)))
signal<-function(x,y,z)
{
z$signals<-ifelse(x>y,1,0)
z
}

tail(signal(dat[, 1], dat[, 2], dat))
# SPY.Adjusted SMA signals
#2011-12-22 124.08 121.693 1
#2011-12-23 125.19 121.805 1
#2011-12-27 125.29 122.108 1
#2011-12-28 123.64 122.361 1
#2011-12-29 124.92 122.871 1
#2011-12-30 124.31 123.276 1

实际上,在这种情况下,我尽量避免使用 ifelse,因为它比这样做慢

signal<-function(x,y,z)
{
z$signals <- 0
z$signals[x > y] <- 1
z
}

关于r - 将函数应用于 xts 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015741/

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