通过 as.character() 将列表强制为字符时为什么会出现这种行为?

2024-01-01

在(大部分)回答的过程中this https://stackoverflow.com/q/7591295/324364问题,我偶然发现了一些我觉得我之前应该已经看过的东西。假设您有一个列表:

l <- list(a = 1:3, b = letters[1:3], c = runif(3))

试图胁迫l各种类型都会返回错误:

> as.numeric(l)
Error: (list) object cannot be coerced to type 'double'
> as.logical(l)
Error: (list) object cannot be coerced to type 'logical'

但是,显然我可以将列表强制为字符,我只是没想到这个结果:

> as.character(l)
[1] "1:3"                                                        
[2] "c(\"a\", \"b\", \"c\")"                                     
[3] "c(0.874045701464638, 0.0843329173512757, 0.809434881201014)"

相反,如果允许我将列表强制为字符,我会认为我会看到更像这样的行为:

> as.character(unlist(l))
[1] "1"                  "2"                  "3"                  "a"                  "b"                 
[6] "c"                  "0.874045701464638"  "0.0843329173512757" "0.809434881201014"

注意我最初是如何指定列表元素的影响输出as.character:

l <- list(a = c(1,2,3), b = letters[1:3], c = runif(3))
> as.character(l)
[1] "c(1, 2, 3)"                                                 
[2] "c(\"a\", \"b\", \"c\")"                                     
[3] "c(0.344991483259946, 0.0492411875165999, 0.625746068544686)"

我有两个问题:

  1. How is as.character从我最初创建的列表中挖掘出信息l为了吐出1:3 versus c(1,2,3).
  2. 到底在什么情况下我想这样做?我什么时候想打电话as.character()在列表上并获得此表单的输出?

对于不平凡的列表,as.character uses deparse生成字符串。

  1. 仅当向量为整数且 1,2,3,...,n 时,它才会解析为1:n.

    c(1,2,3)是两倍,而1:3是整数...

  2. 不知道 :-)

...但是看看deparse如果你想了解as.character here:

deparse(c(1L, 2L, 3L)) # 1:3
deparse(c(3L, 2L, 1L)) # c(3L, 2L, 1L)
deparse(c(1, 2, 3))    # c(1, 2, 3)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 as.character() 将列表强制为字符时为什么会出现这种行为? 的相关文章

随机推荐