R:将函数的输出命名为与输入相同

时间:2014-05-10 07:26:07

标签: r function save output

我编辑以指定我的问题。 这是我的数据集(例如)

library(quantmod)
getSymbols("AAPL",from="2013-01-01")
data<-AAPL
p1<-4   
dO<-data[,1]
dC<-data[,4]
emaO<-EMA(dO,n=p1)
emaC<-EMA(dC,n=p1)
fee<-0.1
cross<-ifelse((emaC<emaO & lag(emaC,1)>lag(emaO,1))|emaC>emaO & lag(emaC,1)<lag(emaO,1),"A","N")
type<-ifelse(emaC>emaO,"S",
             ifelse(emaC<emaO,"L","Equal"))
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_emaO_UP<-emaC>emaO
Pos_emaC_emaO_D<-emaC<emaO
Profit_L<-((((lag(dC,-1))-(lag(dO,-1)))/(lag(dO,-1)))*100)-fee

这应该是一个如何显示的数据框

df1<-data.frame(cross,type,Pos_emaO_dO_UP,Pos_emaO_dO_D,Pos_emaC_dC_UP,Pos_emaC_dC_D,Pos_emaC_emaO_UP,Pos_emaC_emaO_D,Profit_L)
colnames(df1)<-c("cross","type","Pos_emaO_dO_UP","Pos_emaO_dO_D","Pos_emaC_dC_UP","Pos_emaC_dC_D","Pos_emaC_emaO_UP","Pos_emaC_emaO_D","Profit_L")
conditions<-c(Pos_emaO_dO_UP,Pos_emaO_dO_D,Pos_emaC_dC_UP,Pos_emaC_dC_D,Pos_emaC_emaO_UP,Pos_emaC_emaO_D)

我问你这个功能可能是错的

savefun<-function(x){
  Condition<-deparse(substitute(x))
  f<-head(subset(table_1,prekrizeni=="A" & TYP1=="L" & x),-1)
  Success<-nrow(f[f$Zisk_L>0,])/nrow(f)
  d<-data.frame(Condition,Success)
  d
}

所以我会告诉你我不需要被误解的全部内容。 我想创建一个两步过程的函数(或循环)。 1,我想通过函数savefun()ale的条件(第一,第二等)并拥有一个data.frame,其中所有这些结果都在表单data.frame(Condition,Success)中,就像在savefun()中一样行=长度(条件) 2,最后我想要某种循环重复它,直到没有成功列高于前一个。它的意思是。对所有条件使用savefun(),选择具有最高Success列的条件,采用此条件并将其赋予savefun(),参数f如下&gt;

savefun<-function(x){
      Condition<-deparse(substitute(x))
      f<-head(subset(table_1,prekrizeni=="A" & TYP1=="L" & NEW_ADDED_CONDITION & x),-1)
      Success<-nrow(f[f$Zisk_L>0,])/nrow(f)
      d<-data.frame(Condition,Success)
      d
    }

在所有条件(而不是new_added_condition)上再次运行savefun()并重复此过程,直到没有与之前的“最高成功”相比更高的组合。然后停止循环并在停止之前显示结果data.frame或仅显示最后一步中使用条件的名称。 我希望很清楚,我真的会帮助你,我必须完成我的学业,我及时按下。再次感谢 @Richard Scriven @Osssan

1 个答案:

答案 0 :(得分:0)

使用assignget

savefun<-function(x){
    f<-subset(table_1,prekrizeni=="A" & TYP1=="L" & x)
    b<-nrow(f[f$Zisk_L>0,])/nrow(f)
    assign('x',list(x=x,b=b),envir=.GlobalEnv)
    return(get('x',envir=.GlobalEnv))

}