使用as.character将表达式强制转换为字符时,有没有办法绕过500个字符的限制?

我目前正在编写一个适合多项处理树模型的小包(对于不需要的背景信息,网页和pdf)。 它的作用如下:它从文件中读取模型(即公式)并将它们(通过
parse
)转换为表达式。稍后,这些表达式中的一些变量由来自另一个文件的其他变量交换(即,应用模型限制)。因此,模型被转换为字符(通过
as.character
),交换通过
gsub
完成。 问题:如果单个表达式超过500个字符,则通过
as.character
将它们转换回500个字符(或左右)。
?as.character
给出:   as.character截断的组件   语言对象为500个字符   (在1.3.1之前约为70)。 这是一个例子:
text1 <- paste(rep(LETTERS, 10), collapse = " + ")
nchar(text1)
[1] 1037

expr1 <- parse(text = text1)
text2 <- as.character(expr1)
[1] 504
问题:你能解决这500个字符的限制吗? 我知道如果我们在第一次解析模型之前应用限制(即交换变量),我们可以解决这个问题。但是,这将涉及大量编程,因为整个事情基本上已经准备就绪,如果我们能够以另一种方式绕过这500个字符的限制,那将会很棒。     
已邀请:
你可以通过deparse和gsub做丑陋的事情:
expr1 <- parse(text = text1)
attributes(expr1) <- NULL
(text3 <- paste(deparse(expr1), collapse=""))
#rm whitespace etc
(text3 <- gsub("\)$", "", gsub("^expression\(", "", 
        gsub("[[:space:]][[:space:]]+", " ", text3))))
nchar(text3)
更多关于你的应用程序,你可以使用
deparse
用公式制作字符串, 并使用此功能:
safeDeparse <- function(expr){
    ret <- paste(deparse(expr), collapse="")
    #rm whitespace
    gsub("[[:space:]][[:space:]]+", " ", ret)
}
绕过使deparse添加换行符并将单个表达式拆分为多个字符串的愚蠢长度限制,比较:
(f <- formula(paste("X ~", paste(rep(letters, 10), collapse=" + "))))
deparse(f)
safeDeparse(f)
    
更新: 从基本版本2.15.0开始,as.character现在有这种行为   as.character以500个字符分隔语言对象中的行,并插入换行符。 要获取包版本,请使用:
packageVersion("base")
干杯     

要回复问题请先登录注册