R:如何创建公式对象以便允许正确的文本表示?

时间:2014-11-05 02:09:46

标签: regex r formula gsub

我正在创建一个相当长的公式,当我尝试获取公式元素时,我发现已经插入了随机的“\ n”元素。 正则表达式工具在普通字符串上工作正常,我想我首先在创建公式时做错了。如何正确创建公式对象?如果公式表示不能改变,那将对我有所帮助,因为那时我可以停止尝试并查看其他地方。

这是一个示例公式:

myBigFormulaA <- as.formula(paste("Y ~ ",paste(seq(0,200,1),collapse="+")))

我尝试过Reduce / deparse:

Reduce(paste, deparse(myBigFormulaA))

其中概述了插入了一些空格:

    [1] "Y ~ 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 +      14 + 15 + 16 + 17 +
 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 +      26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 
36 + 37 +      38 + 39 + 40 + 41 + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 +      50 + 51 + 52 + 53
 + 54 + 55 + 56 + 57 + 58 + 59 + 60 + 61 +      62 + 63 + 64 + 65 + 66 + 67 + 68 + 69 + 70 + 71 + 
72 + 73 +      74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 +      86 + 87 + 88 + 89
 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 +      98 + 99 + 100"

我也试过regexp:

gsub(" ", "", as.character(myBigFormulaA)[3])

这清楚地表明插入了“\ n”:

"0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+
35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+
67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+
99+100+101+\n102+103+104+105+106+107+108+109+110+111+112+113+114+115+116+117+118+119+120+121+122+
123+124+125+126+127+128+129+130+131+132+133+134+135+136+137+138+139+140+141+142+143+144+145+146+
147+148+149+150+151+152+153+154+155+156+157+158+159+160+161+162+163+164+165+166+167+168+169+170+
171+172+173+174+175+176+177+178+179+180+181+182+183+184+\n185+186+187+188+189+190+191+192+193+
194+195+196+197+198+199+200"

非常欢迎任何有关如何处理此行为的指示。

1 个答案:

答案 0 :(得分:4)

我用过

safeDeparse <- function(x,collapse=" ") {
    paste(deparse(x),collapse=collapse)
}

执行此任务。您可以几乎通过增加width.cutoff的{​​{1}}参数来做到这一点,但是上限为500,这对您的示例不太有效(叹气 - 我不知道为什么这个硬编码限制不能增加到更大的范围,例如2000 ......)