如何将公式对象处理为字符对象?

时间:2019-06-21 06:59:20

标签: r string

这是我的问题:

formula = label ~ m1 + m2 + m2m1 + topix + sp500 + Open + High + Low +
  Close + Volume + psyco12 + psyco24 + closeB5 + closeB10 +
  closeB20 + closeB60 + William5 + William8 + William13 + William21 +
  William34 + RSV9 + K + D + KD + MA5 + MA10 + MA20 + MA60 +
  MA120 + MA240 + MA5MA20 + DI + EMA12 + EMA26 + DIF + MACD +
  OSC + change + RSI6p + RSI6m + RSI6 + RSI12p + RSI12m + RSI12 +
  RSI6RSI12 + OBV + JPYUSD + MarCap + MonthVol + MonthVal +
  GV

class(formula)是公式

我想将其转换为以下格式。

c("m1","m2","m2m1","topix","sp500","Open","High","Low",
                 "Close","Volume","psyco12","psyco24","closeB5","closeB10", 
                 "closeB20","closeB60","William5","William8","William13","William21",
                 "William34","RSV9","K","D","KD","MA5","MA10","MA20","MA60",
                 "MA120","MA240","MA5MA20","DI","EMA12","EMA26","DIF","MACD",
                 "OSC","change","RSI6p","RSI6m","RSI6","RSI12p","RSI12m","RSI12", 
                 "RSI6RSI12","OBV","JPYUSD","MarCap","MonthVol","MonthVal","GV")

包括该c()

我该如何做?

2 个答案:

答案 0 :(得分:5)

可以选择reformulate将名称的vector转换为公式

f1 <- reformulate(v1, "label")

反之,请使用all.vars

v2 <- all.vars(f1)[-1]
dput(v2)
c("m1", "m2", "m2m1", "topix", "sp500", "Open", "High", "Low", 
"Close", "Volume", "psyco12", "psyco24", "closeB5", "closeB10", 
"closeB20", "closeB60", "William5", "William8", "William13", 
"William21", "William34", "RSV9", "K", "D", "KD", "MA5", "MA10", 
"MA20", "MA60", "MA120", "MA240", "MA5MA20", "DI", "EMA12", "EMA26", 
"DIF", "MACD", "OSC", "change", "RSI6p", "RSI6m", "RSI6", "RSI12p", 
"RSI12m", "RSI12", "RSI6RSI12", "OBV", "JPYUSD", "MarCap", "MonthVol", 
"MonthVal", "GV")

或者如果有多个因变量,

all.vars(as.list(f1)[[3]])

数据

v1 <- c("m1","m2","m2m1","topix","sp500","Open","High","Low",
                 "Close","Volume","psyco12","psyco24","closeB5","closeB10", 
                 "closeB20","closeB60","William5","William8","William13","William21",
                 "William34","RSV9","K","D","KD","MA5","MA10","MA20","MA60",
                 "MA120","MA240","MA5MA20","DI","EMA12","EMA26","DIF","MACD",
                 "OSC","change","RSI6p","RSI6m","RSI6","RSI12p","RSI12m","RSI12", 
                 "RSI6RSI12","OBV","JPYUSD","MarCap","MonthVol","MonthVal","GV")

答案 1 :(得分:4)

这是使用@akrun数据(v1)的另一个选项。按照formula上的文档,您可以使用以下方法获取变量:

attr(terms.formula(formula), "term.labels")
# output
 [1] "m1"        "m2"        "m2m1"      "topix"     "sp500"    
 [6] "Open"      "High"      "Low"       "Close"     "Volume"   
[11] "psyco12"   "psyco24"   "closeB5"   "closeB10"  "closeB20" 
[16] "closeB60"  "William5"  "William8"  "William13" "William21"
[21] "William34" "RSV9"      "K"         "D"         "KD"       
[26] "MA5"       "MA10"      "MA20"      "MA60"      "MA120"    
[31] "MA240"     "MA5MA20"   "DI"        "EMA12"     "EMA26"    
[36] "DIF"       "MACD"      "OSC"       "change"    "RSI6p"    
[41] "RSI6m"     "RSI6"      "RSI12p"    "RSI12m"    "RSI12"    
[46] "RSI6RSI12" "OBV"       "JPYUSD"    "MarCap"    "MonthVol" 
[51] "MonthVal"  "GV"

现在,您只需将dput()应用于上述对象即可包含c()

dput(attr(terms.formula(formula), "term.labels"))
# output
c("m1", "m2", "m2m1", "topix", "sp500", "Open", "High", "Low", 
"Close", "Volume", "psyco12", "psyco24", "closeB5", "closeB10", 
"closeB20", "closeB60", "William5", "William8", "William13", 
"William21", "William34", "RSV9", "K", "D", "KD", "MA5", "MA10", 
"MA20", "MA60", "MA120", "MA240", "MA5MA20", "DI", "EMA12", "EMA26", 
"DIF", "MACD", "OSC", "change", "RSI6p", "RSI6m", "RSI6", "RSI12p", 
"RSI12m", "RSI12", "RSI6RSI12", "OBV", "JPYUSD", "MarCap", "MonthVol", 
"MonthVal", "GV")

公式的定义:

formula <- as.formula(paste("label ~ ", paste(v1, collapse = " + "), sep = ""))