是否可以使用deparse
返回具有原始分数的字符串?默认行为如下所示:
> deparse(c(1/2, 2/3, 3))
[1] "c(0.5, 0.666666666666667, 3)"
所需结果"c(1/2, 2/3, 3)"
类似一个列表:
> deparse(list("name", 1/2, 2/3))
[1] "list(\"name\", 0.5, 0.666666666666667)"
所需结果"list(\"name\", 1/2, 2/3)"
编辑:
有关输入的更多详细信息。用户可以提供例如“ 1/2 2/3 3”。经过一些解析后,我使用MASS::fractions
转换为向量或分数。
x <- c(1/2, 2/3, 3)
x <- MASS::fractions(x)
deparse(x, control = "keepNA")
Result: "c(0.5, 0.666666666666667, 3)"
Desired result "c(1/2, 2/3, 3)"
我正在寻找一种告诉deparse使用分数表示法的方法,或者是一种在传递给deparse之前准备向量的方法,以便获得所需的结果。从到目前为止的答复(谢谢!)看来,这可能很困难
答案 0 :(得分:3)
您可以使用deparse(quote(c(1/2, 2/3, 3)))
。
quote
首先将引用该表达式的内容告诉意图,然后将deparse转换为字符串
输出:
> deparse(quote(c(1/2, 2/3, 3)))
[1] "c(1/2, 2/3, 3)"
自欺欺人的方式:
x = alist(x = c(1/2, 2/3, 3))
deparse(x$x)
?alist:
alist处理其自变量就像它们描述函数自变量一样。 因此,不会评估值,并且带标签的参数没有值 是允许的,而list只是忽略它们。最常用的是alist 结合正式服装。
输出:
> deparse(x$x)
[1] "c(1/2, 2/3, 3)"
答案 1 :(得分:2)
您可以使用MASS软件包中的fractions()
功能。例如,
library(MASS)
tmp <- c(1/2, 2/3, 3)
fractions(tmp)
# [1] 1/2 2/3 3
如果您确实希望以c(1/2, 2/3, 3)
的形式使用它,请使用paste
:
paste0("c(", paste(fractions(tmp), collapse = ", "), ")")
# [1] "c(1/2, 2/3, 3)"