在(主要)回答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:3
和c(1,2,3)
。 as.character()
并获取此表单的输出? 最佳答案
对于非平凡的列表,as.character
使用deparse
生成字符串。
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/