是否可以在列表的名称变量中存储数字向量? 即
x <- c(1.2,3.4,5.9)
alist <- list()
alist[[x]]$somevar <- 2
我知道我可以将它存储为list元素中的一个向量,但是我认为如果数字向量是名称,那么移动并找到我想要的列表元素(如果需要的话,可以添加)会更快列表元素本身......
修改
我在下面的上下文中包含了代码的嗤之以鼻,为命名法的变化道歉。简而言之,我正在研究一个聚类问题,数据集太大而无法直接进行距离计算,我的解决方案是为数据的每个维度创建二进制文件,并为原始数据中的每个观察值找到最近的二进制文件。当然,我不能制作完整的排列矩阵,因为它会比原始数据本身更大。因此,我选择为每个维度单独找到最近的bin,并将其添加到向量temp.bin
,理想情况下,该向量将成为将存储原始观察的rowname的列表元素的名称。我希望这会简化搜索并将列表添加到列表中。
我也意识到距离计算部分可能是错误的 - 这仍然是一个原型。
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)
迄今为止最接近的答案是John Coleman。
答案 0 :(得分:2)
names(alist)
是一个字符向量。数字向量不是字符串,因此它不是列表元素的有效名称。你想要的是不可能的。您可以创建此类列表的字符串表示形式并将其用作名称,但这会很麻烦。如果这是您真正想做的事情,您可以执行以下操作:
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。你想要实现什么目标?
答案 1 :(得分:1)
稍作修改,我们可以实现以下目标:
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))
)John Coleman发表评论:
你不清楚你回答了这个问题。你给了一个列表 名称向量是向量x,强制为字符。 OP问是否 有可能&#34;如果数字向量是列表元素的名称 本身...&#34;。他们希望将x视为单个名称,而不是矢量 名。
如果你想让你可以尝试使用deparse(substitute(.))
trick
x
命名的列表元素
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。