子集必须是R中的逻辑错误

时间:2014-06-04 09:56:29

标签: r

我使用此代码并尝试对其进行子集化。源数据在

之下
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] ?

1 个答案:

答案 0 :(得分:0)

发布评论作为答案,因为Bury说它有效:

看来你的vr是一个字符串。如果你走这条路,你需要做臭名昭着的eval(parse(text= paste0('subset(frame,' , vr,')' )))建设。