我使用此代码并尝试对其进行子集化。源数据在
之下library(quantmod)
library(combinat)
getSymbols("AAPL",from="2012-01-01")
data<-AAPL
p1<-4
dO<-data[,1]
dC<-data[,4]
emaO<-EMA(dO,n=p1)
emaC<-EMA(dC,n=p1)
Pos_emaO_dO_UP<-emaO>dO
Pos_emaO_dO_D<-emaO<dO
Pos_emaC_dC_UP<-emaC>dC
Pos_emaC_dC_D<-emaC<dC
Pos_emaC_dO_D<-emaC<dO
Pos_emaC_dO_UP<-emaC>dO
Pos_emaO_dC_UP<-emaO>dC
Pos_emaO_dC_D<-emaO<dC
frame<-
data.frame(Pos_emaO_dO_UP,Pos_emaO_dO_D,Pos_emaC_dC_UP,Pos_emaC_dC_D,Pos_emaC_dO_D,Pos_emaC_dO_UP,Pos_emaO_dC_UP,Pos_emaO_dC_D)
colnames(frame)<-vector<-c("Pos_emaO_dO_UP","Pos_emaO_dO_D","Pos_emaC_dC_UP","Pos_emaC_dC_D","Pos_emaC_dO_D","Pos_emaC_dO_UP","Pos_emaO_dC_UP","Pos_emaO_dC_D")
这是用来取出无意义列的代码
comb<-as.data.frame(combn(vector,4))
comb
rc<-comb[!sapply(comb, function(x) any(duplicated(sub('_D|_UP', '', x))))]
然后我尝试通过第一列
的变量组合来对主框架进行子集化kb<-as.vector(rc[,1])
vr<-paste(kb,collapse=" & ")
subset(frame,vr)
但结果是:子集必须是逻辑的。我需要通过所有这些组合(如
)对帧进行子集化subset(frame,Pos_emaO_dO_D & Pos_emaC_dC_UP & Pos_emaC_dO_D & Pos_emaO_dC_UP) #etc.
然后逐个使用我编写的每个子集函数来分析
subsetit<-function(x,y){
f<-head(subset(main_table,y & x),-1)
1d_l_prof<-nrow(f[f$Profit_L_1>0.1,])/nrow(f)
2d_l_prof<-(nrow(f[f$Profit_L_2>0.1,])/nrow(f))/2
3d_l_prof<-(nrow(f[f$Profit_L_3>0.1,])/nrow(f))/3
4d_l_prof<-(nrow(f[f$Profit_L_4>0.1,])/nrow(f))/4
5d_l_prof<-(nrow(f[f$Profit_L_5>0.1,])/nrow(f))/5
6d_l_prof<-(nrow(f[f$Profit_L_6>0.1,])/nrow(f))/6
7d_l_prof<-(nrow(f[f$Profit_L_7>0.1,])/nrow(f))/7
8d_l_prof<-(nrow(f[f$Profit_L_8>0.1,])/nrow(f))/8
9d_l_prof<-(nrow(f[f$Profit_L_9>0.1,])/nrow(f))/9
10d_l_prof<-(nrow(f[f$Profit_L_10>0.1,])/nrow(f))/10
df<-data.frame(1d_l_prof,2d_l_prof,3d_l_prof,4d_l_prof,5d_l_prof,6d_l_prof,7d_l_prof,8d_l_prof,9d_l_prof,10d_l_prof)
return(df)
}
子集错误的问题应该在哪里? 会有所作为吗
lapply(rc[,c(1:length(rc))],subsetit] ?
答案 0 :(得分:0)
发布评论作为答案,因为Bury说它有效:
看来你的vr是一个字符串。如果你走这条路,你需要做臭名昭着的eval(parse(text= paste0('subset(frame,' , vr,')' )))
建设。