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

标签 list r coercion

在(主要)回答this问题的过程中,我偶然发现了一些我觉得本应该已经看过的东西。假设您有一个列表:

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)"

我有两个问题:
  • as.character如何挖掘我最初创建的列表l的信息,以便吐出1:3c(1,2,3)
  • 我到底想在什么情况下这样做?我什么时候想在列表上调用as.character()并获取此表单的输出?
  • 最佳答案

    对于非平凡的列表,as.character使用deparse生成字符串。

  • 仅当向量是整数和1,2,3,...,n-时,它才视为1:n
    c(1,2,3)为 double ,而1:3为整数...
  • 不知道:-)

  • ...但是如果您想在此处了解deparse,请查看as.character:
    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)
    

    关于list - 通过as.character()将列表强制转换为字符时,为什么会出现这种行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7591632/

    相关文章:

    list - scala如何访问列表中元组中的元素

    c# - 在 'foreach' 语句中使用从 SQLite 查询中检索到的列表

    r - 如何使用目标向量对data.table进行排序

    python - 在索引和插入行时防止强制 Pandas 数据帧

    python - 按倒数第二个字符对字符串列表进行排序

    c# - 如何将列表的属性收集到 C# 中的另一个列表?

    r - 在 R 中创建一系列间隔

    r - 排列 ggplot 多个对象,同时保持高度不变

    python - 删除带有 pandas 数据强制错误的行

    haskell - 为什么 GHC.Types.Any 在这里?