Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 为什么在通过as.character()将列表强制为character时会出现这种行为?_List_R_Coercion - Fatal编程技术网

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

List 为什么在通过as.character()将列表强制为character时会出现这种行为?,list,r,coercion,List,R,Coercion,在(大部分)回答问题的过程中,我偶然发现了一些我觉得我以前真的应该看到的东西。假设您有一个列表: l <- list(a = 1:3, b = letters[1:3], c = runif(3)) 然而,我显然被允许强制列表为角色,我只是没想到会有这样的结果: > as.character(l) [1] "1:3" [2] "c(\"a\", \"b\", \"c\")

在(大部分)回答问题的过程中,我偶然发现了一些我觉得我以前真的应该看到的东西。假设您有一个列表:

l <- list(a = 1:3, b = letters[1:3], c = runif(3))
然而,我显然被允许强制列表为角色,我只是没想到会有这样的结果:

> 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"
请注意,我如何指定列表元素最初会影响
作为.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)"
l作为字符(l)
[1] c(1、2、3)
[2] “c(\'a\'、\'b\'、\'c\”)
[3] c(0.344991483259946、0.0492411875165999、0.62574608544686)
我有两个问题:

  • as.character
    如何从我最初创建的列表
    l
    中挖掘信息,以便吐出
    1:3
    c(1,2,3)
  • 确切地说,在什么情况下我会想这样做?我想什么时候在列表上调用
    as.character()
    ,并获得此表单的输出

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

  • 仅当向量为整数且为1,2,3,…,n-则它被分解为
    1:n

    c(1,2,3)
    是双精度的,而
    1:3
    是整数

  • 不知道:-)

  • …但如果您想将
    理解为.character
    ,请查看
    deparse

    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)
    
    帮助文件确实说

    对于列表,除提取长度为1个字符向量的第一个元素外,它将单独对元素进行解列

    我以前在尝试回答一个关于
    grep
    的问题[非在线]时看到过这一点。考虑:

    > x <- list(letters[1:10],letters[10:19])
    > grep("c",x)
    [1] 1 2
    
    >x grep(“c”,x)
    [1] 1 2
    
    grep
    x
    上使用
    作为.character
    ,其结果是,由于两者都有
    c(
    ),所以两个组件都匹配。这需要一段时间才能确定


    关于“它为什么这样做?”,我猜R core的一位成员希望它能做到这一点。

    Aha,
    deparse
    似乎确实解释了我的第一个问题。这就是为什么R,尽管它在统计编程方面很好,但在那些专门使用它或愿意投入过多精力的狭隘群体之外永远不会流行的原因之一处理其不可预测行为的能量。
    > x <- list(letters[1:10],letters[10:19])
    > grep("c",x)
    [1] 1 2