R 我要退一双

R 我要退一双,r,list,return,R,List,Return,在R中,我试图从一个函数返回一对,其中第一个元素是向量,第二个元素是映射。以下是返回语句: returnList = list("kmeansVector" = kmV, "clustMap" = clustMap) return(returnList) 假设在控制台中,我将li设置为该函数的返回值。然后li[1]将给我kmV中的所有元素。我想做的是l[1][3],这会给我原来在kmV中的第三个元素,但是R告诉我它是空的: > li[1][3] $<NA> NULL >

在R中,我试图从一个函数返回一对,其中第一个元素是向量,第二个元素是映射。以下是返回语句:

returnList = list("kmeansVector" = kmV, "clustMap" = clustMap)
return(returnList)
假设在控制台中,我将
li
设置为该函数的返回值。然后
li[1]
将给我
kmV
中的所有元素。我想做的是
l[1][3]
,这会给我原来在
kmV
中的第三个元素,但是R告诉我它是空的:

> li[1][3]
$<NA>
NULL

> attributes(li[1])
$names
[1] "kmeansVector"
>li[1][3]
$
无效的
>属性(li[1])
$names
[1] “kmeansVector”

kmV
kmeans
对象的5元素向量。因此,当函数返回列表时,
kmV
中的每个元素似乎都连接在一起。如何获取最初位于
kmV

中的第三个元素这个问题在堆栈溢出之前几乎肯定已经得到了回答,但我找不到它。这里有一个当地的答案:

帮助(`[`)
的帮助文件所述,在递归(类似列表的)对象下:

通过[建立索引类似于原子向量,并选择 指定的元素

[[和$都选择列表中的单个元素 是,$不允许计算索引,而[[does.x$name是 相当于x[[“name”,exact=FALSE]]。此外,部分匹配 [[的行为可以使用确切的参数进行控制

对列表使用
[
将返回一个列表,因为
[
可以获取列表中的多个元素。使用
[
将返回该列表的元素

下面是一个有助于解释的示例。下面,
a
是两个元素的列表

> a <- list(1:4,letters[24:26])
> a
[[1]]
[1] 1 2 3 4

[[2]]
[1] "x" "y" "z"

> a[1:2]
[[1]]
[1] 1 2 3 4

[[2]]
[1] "x" "y" "z"

> a[1] #returns a list of length 1 containing the first element
[[1]]
[1] 1 2 3 4

> a[[1]] #returns the first element
[1] 1 2 3 4

> a[[1:2]] #equivalent to a[[1]][[2]]
[1] 2
>a
[[1]]
[1] 1 2 3 4
[[2]]
[1] “x”“y”“z”
>a[1:2]
[[1]]
[1] 1 2 3 4
[[2]]
[1] “x”“y”“z”
>[1]#返回包含第一个元素的长度为1的列表
[[1]]
[1] 1 2 3 4
>a[[1]]#返回第一个元素
[1] 1 2 3 4
>a[[1:2]]#相当于a[[1][[2]]
[1] 2

这个问题在堆栈溢出之前几乎肯定已经得到了回答,但我找不到它。所以这里有一个本地答案:

帮助(`[`)
的帮助文件所述,在递归(类似列表的)对象下:

通过[建立索引类似于原子向量,并选择 指定的元素

[[和$都选择列表中的单个元素 是,$不允许计算索引,而[[does.x$name是 相当于x[[“name”,exact=FALSE]]。此外,部分匹配 [[的行为可以使用确切的参数进行控制

对列表使用
[
将返回一个列表,因为
[
可以获取列表中的多个元素。使用
[
将返回该列表的元素

下面是一个有助于解释的示例。下面,
a
是两个元素的列表

> a <- list(1:4,letters[24:26])
> a
[[1]]
[1] 1 2 3 4

[[2]]
[1] "x" "y" "z"

> a[1:2]
[[1]]
[1] 1 2 3 4

[[2]]
[1] "x" "y" "z"

> a[1] #returns a list of length 1 containing the first element
[[1]]
[1] 1 2 3 4

> a[[1]] #returns the first element
[1] 1 2 3 4

> a[[1:2]] #equivalent to a[[1]][[2]]
[1] 2
>a
[[1]]
[1] 1 2 3 4
[[2]]
[1] “x”“y”“z”
>a[1:2]
[[1]]
[1] 1 2 3 4
[[2]]
[1] “x”“y”“z”
>[1]#返回包含第一个元素的长度为1的列表
[[1]]
[1] 1 2 3 4
>a[[1]]#返回第一个元素
[1] 1 2 3 4
>a[[1:2]]#相当于a[[1][[2]]
[1] 2

尝试
li[[1]][3]
。我相信
li[1]
将返回一个包含向量的列表,这将使
[3]
在所述列表中查找第三个元素(返回
NULL
,因为不存在).BlueMagister是完全正确的。这与k-means或pair的概念无关,而是与列表的访问方式有关。“[”函数返回一个子列表,该子列表周围有一层不可穿透的膜,阻止访问。要想突破它,需要“[”。请尝试
li[[1]][3]
。我相信
li[1]
将返回一个包含向量的列表,这将使
[3]
在所述列表中查找第三个元素(返回
NULL,因为不存在)。BlueMagister完全正确。这与k-means或pair的概念无关,而与访问列表的方式有关。“”函数返回一个子列表,该子列表周围有一层不可穿透的薄膜,阻止访问。若要突破此子列表,需要“[]”。