【问题标题】:Subset must be logical error in R子集必须是 R 中的逻辑错误
【发布时间】:2014-06-04 09:56:28
【问题描述】:

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

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

【问题讨论】:

  • @jbaums 有新问题 :)
  • 这个问题与您的other question 有何不同?他们在我看来是一样的......
  • 另一个问题是不同的,我当时已经改变了它,但是jbaums告诉我最好创建一个新的,所以我做到了。首先是不同的。我会删除它以使其清楚。谢谢
  • 如果有答案,我不允许删除,对不起我的错误。不会重复。
  • 您的vr 似乎是一个字符串。如果你走这条路,你需要做臭名昭著的eval(parse(paste0('subset(frame,' , vr,')' ))) 构造。

标签: r


【解决方案1】:

因为 Bury 说它有效,所以发表评论作为答案:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    相关资源
    最近更新 更多