分数的稀疏向量,保留分数

时间:2019-10-09 06:31:06

标签: r

是否可以使用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之前准备向量的方法,以便获得所需的结果。从到目前为止的答复(谢谢!)看来,这可能很困难

2 个答案:

答案 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)"
相关问题