我希望能够获得任何 R 对象的字符串表示形式(而不是打印)。在Python中,我会得到这样的东西
>>> class Foo():
... pass
...
>>> f = Foo()
>>> print(f)
<__main__.Foo object at 0x10dab0910>
>>> x=str(f)
>>> x
'<__main__.Foo object at 0x10dab0910>'
>>> a = {1, 2,3 }
>>> str(a)
'{1, 2, 3}'
>>> str(str)
"<class 'str'>"
>>> str(foo)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
>>>
KeyboardInterrupt
>>> def foo(): pass
...
>>> str(foo)
'<function foo at 0x10dab1170>'
Run Code Online (Sandbox Code Playgroud)
在 R 中,我尝试了以下操作(以斜体引用帮助文本):
as.character():如果我传递一个向量,我期望一个包含向量的字符串,而不是字符串向量,所以as.character不是我想要的。
str()“不返回任何内容”,它只是打印它:
a <- str(str)
# function (object, ...)
a
# NULL
Run Code Online (Sandbox Code Playgroud)
我不想依赖,capture.output因为我希望避免通过标准输出来获取此信息。
toString()“返回长度为 1 的字符向量”,即不是我需要的,例如应用于 a 时data.frame:
toString(cars)
# [1] "c(4, 4, 7, 7, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 12
Run Code Online (Sandbox Code Playgroud)
出于与(见上文)相同的原因, 的功能print()不能满足我的需求str()。另外,如果实体是可以渲染的东西,它将触发渲染而不是字符串表示。
cat()“目前仅处理原子向量和名称”。因此,cat将出现以下错误data.frame:
cat(cars)
# Error in cat(cars) : argument 1 (type 'list') cannot be handled by 'cat'
Run Code Online (Sandbox Code Playgroud)
使用deparse()。例如,
deparse(cars)
#> [1] "structure(list(speed = c(4, 4, 7, 7, 8, 9, 10, 10, 10, 11, 11, "
#> [2] "12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, "
#> [3] "16, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 20, 20, 20, 20, 20, "
#> [4] "22, 23, 24, 24, 24, 24, 25), dist = c(2, 10, 4, 22, 16, 10, 18, "
#> [5] "26, 34, 17, 28, 14, 20, 24, 28, 26, 34, 34, 46, 26, 36, 60, 80, "
#> [6] "20, 26, 54, 32, 40, 32, 40, 50, 42, 56, 76, 84, 36, 46, 68, 32, "
#> [7] "48, 52, 56, 64, 66, 54, 70, 92, 93, 120, 85)), class = \"data.frame\", row.names = c(NA, "
#> [8] "-50L))"
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v0.3.0)于 2020-07-24 创建
对于大多数对象,您可以解析和评估输出并获得与原始对象类似的对象。