gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:13:41 25 4
gpt4 key购买 nike

我目前正在编写一个小包,它应该适合多项式处理树模型(对于不需要的背景信息 web pagepdf)。

它的作用如下:它从文件中读取模型(即公式)并将它们(通过 parse)转换为表达式。后来,这些表达式中的一些变量被另一个文件中的其他变量交换(即,应用了模型限制)。因此,模型被重新转换为字符(通过 as.character )并且交换是通过 gsub 完成的。 .
问题:如果单个表达式的长度超过 500 个字符,则通过 as.character 将它们转换回来将它们截断为 500 个字符(左右)。?as.character给出:

as.character truncates components of language objects to 500 characters (was about 70 before 1.3.1).



这里有一个例子:
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)

关于r - 使用 as.character 将表达式强制转换为字符时,有没有办法绕过 500 个字符的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5180576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com