什么相当于R中的'cons`?

时间:2015-01-30 05:29:44

标签: r list

在lisp中,您可以使用cons表单附加到列表(不是原子向量)。 R中的等效函数是什么?我尝试了谷歌搜索,但只有条目寻求R的优点和缺点。

2 个答案:

答案 0 :(得分:1)

示例:

x <- list("A")
y <- c(x, "B")
y
[[1]]
[1] "A"

[[2]]
[1] "B"

在R中,c函数被重载。它连接列表,原子矢量和许多其他结构。

> methods(c)
[1] c.bibentry*       c.Date            c.noquote         c.numeric_version c.person*        
[6] c.POSIXct         c.POSIXlt         c.warnings 

R列表(称为&#34;递归&#34;在R术语中)可以使用整数索引访问,或者如果具有字符值的特定叶子的名称。我认为carlist_name[[1]]cdrlist_name[-1]。请注意,我使用了不同的提取函数。据我了解LisP,cdr是一个列表,但car是第一个位置的值,可能是也可能不是列表。

可以使用更实用的格式[[[

> '[['(y, 1)
[1] "A"
> '['(y, -1)
[[1]]
[1] "B"

你甚至可以定义汽车或cdr功能:

> car <- function(z) z[[1]]
> car(y)
[1] "A"

> cdr <- function(z) z[-1]
> cdr(y)
[[1]]
[1] "B"

答案 1 :(得分:0)

R语言对象是可以具有任何长度的所有向量,因此对于cons对象(即具有左侧和右侧的双峰)没有等同性。你可以在R中创建一个为cons对象建模的类,或者你可以只使用lengt的向量,第一个元素是左边,第二个元素是右边。您甚至可以将矢量'car'和'cdr'中的元素命名为

x <- c(1,2)
names(x) <- c('car','cdr')

此外,R不使用指针或引用语义(基于环境的环境和事物除外)。简而言之,R中没有“缺点”(如在lisp中)。