首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数字向量存储在列表的名称中

将数字向量存储在列表的名称中
EN

Stack Overflow用户
提问于 2018-02-15 10:36:38
回答 2查看 142关注 0票数 1

是否可以将数字向量存储在列表的名称变量中?即。

代码语言:javascript
复制
x <- c(1.2,3.4,5.9)
alist <- list()
alist[[x]]$somevar <- 2

我知道我可以将其存储为列表元素中的向量,但我认为如果数字向量是list元素本身的名称,则更快地遍历并找到我想要的列表元素的元素(如果需要的话).

编辑:I在下面的上下文中包含了代码片段,为术语的更改表示歉意。简单地说,我正在处理一个聚类问题,数据集太大,无法直接计算距离,我的解决方案是为数据的每个维度创建回收箱,并为原始数据中的每个观察找到最近的收件箱。当然,我不能建立一个完整的排列矩阵,因为这比原始数据本身要大。因此,我选择为每个维度分别查找最近的bin,并将其添加到向量temp.bin中,理想情况下,它将成为存储原始观察的行名的列表元素的名称。我希望这将简化搜索和添加回收箱到列表中。

我还意识到,距离计算部分很可能是错误的-这仍然是一个原型。

代码语言:javascript
复制
binlist <- list()
for(i in 1:nrow(data)) # iterate through all data points
{
# for each datapoint make a container for the nearest bin found
temp.bin <- vector(length = length(markers))
names(temp.bin) <- markers
for(j in markers) # and dimensions 
{
  # find the nearest bin for marker j
  if(dist == "eucl")
  {
    dists <- apply(X=bin.mat, MARGIN = 1, FUN= function(x,y) {sqrt(sum((x-y)^2))}, y=data[i,j])
    temp.bin[j] <- bin.mat[which(dists == min(dists)),j]
  }
}
### I realise this part doesn't work
binlist[[temp.bin]] <- append(binlist[[temp.bin]], values = i)

到目前为止,最接近的答案是约翰科尔曼。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-15 12:07:22

names(alist)是一个字符向量。数字向量不是字符串,因此它不是list元素的有效名称。因此,你想要的是不可能的。您可以为这样的列表创建一个字符串表示,并将其用作名称,但这将非常麻烦。如果这是你真正想做的事情,你可以做如下的事情:

代码语言:javascript
复制
x <- c(1.2,3.4,5.9)
alist <- list()
alist[[paste(x,collapse = " ")]]$somevar <- 2

这将创建一个1元素列表,其唯一元素的名称为"1.2 3.4 5.9"

虽然这可能有一些用例,但我怀疑您有一个XY problem。你想达到什么目的?

票数 2
EN

Stack Overflow用户

发布于 2018-02-15 10:46:17

解决方案

只要稍加修改,我们就可以实现以下目标:

代码语言:javascript
复制
x = c(1.2,3.4,5.9)
alist = vector("list", length(x))
names(alist) = x
alist[as.character(x)] = list(c(somevar = 2))
#$`1.2`
#somevar 
#      2 
#
#$`3.4`
#somevar 
#      2 
#
#$`5.9`
#somevar 
#      2 

解释

基本上:

  • 我必须创建具有正确长度的list (vector("list", length(x)))
  • 然后指定正确的名称(names(alist) = x)
  • 因此,我们可以使用[按名称调用列表级别,并为每个列表元素(alist[as.character(x)] = list(c(somevar = 2)))分配一个新列表。

第二解

请听约翰科尔曼的评论:

你是否回答了这个问题还不清楚。您给出了一个列表,它的名称向量是向量x,它被胁迫为字符。OP询问是否有可能“如果数字向量是list元素本身的名称.”。他们想把x当作一个名字,而不是一个名字的向量。

如果您想让列表元素以向量x命名,可以使用 trick进行尝试

代码语言:javascript
复制
x = c(1.2,3.4,5.9)
alist = list()
alist[[deparse(substitute(x))]]$somevar = 2
#> alist[[deparse(substitute(x))]]
#$somevar
#[1] 2

如果您真的希望将x中的数字值作为名称本身,那么我将指向John's solution

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48805135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档