【问题标题】:R:Name the output of function same as inputR:将函数的输出命名为与输入相同
【发布时间】:2014-05-10 07:26:06
【问题描述】:

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

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

这应该是它的外观的data.frame

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() 与 n行=长度(条件) 2,最后我想要某种循环,重复它直到没有成功列高于前一个。它的意思是。对所有条件使用savefun(),选择Success列最高的条件,取这个条件给savefun(),参数f这样>

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

【问题讨论】:

  • 试试assign("x",list(x=x,b=b),envir = .GlobalEnv)是否可行,稍后使用get("x")访问它
  • 你可能想要deparse(substitute(x))而不是as.character(substitute(x))
  • 谢谢,我改了。这个比较好。你能帮我解决我上面提到的“”问题吗?我编辑答案。非常感谢
  • 用于解析通过vector, do.call(rbind,lapply(vector,function(x) savefun(x)))
  • 谢谢,但它不起作用。它在 data.frame 中仅显示 1 行

标签: r function save output


【解决方案1】:

使用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))

}

【讨论】:

  • 小心assign。按照你写的方式,x 如果它已经存在于全局环境中,它将被覆盖。
猜你喜欢
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多