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

R 在列表的名称中存储数字向量,r,R,是否可以在列表的names变量中存储数字向量? 即 到目前为止,最接近的答案是约翰·科尔曼。解决方案 通过一些细微的修改,我们可以实现以下目标: 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 # #

是否可以在列表的names变量中存储数字向量? 即

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

解决方案 通过一些细微的修改,我们可以实现以下目标:

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 
x <- c(1.2,3.4,5.9)
alist <- list()
alist[[paste(x,collapse = " ")]]$somevar <- 2

解释 基本上:

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

第二种解决方案 约翰·科尔曼评论:


不清楚你是否回答了这个问题。你列出了 名称向量是向量x,强制为字符。OP询问是否 如果数字向量是列表元素的名称,则可能是 他们想把x当作一个单一的名字,而不是一个向量 名字

如果希望以向量
x
命名列表元素,可以尝试使用

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

名称(列表)
是一个字符向量。数字向量不是字符串,因此它不是列表元素的有效名称。因此,您不可能需要这样做。您可以创建这样一个列表的字符串表示形式并将其用作名称,但这会很麻烦。如果这是您真正想要做的,您可以执行以下操作:

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 
x <- c(1.2,3.4,5.9)
alist <- list()
alist[[paste(x,collapse = " ")]]$somevar <- 2

x我是不是搞错了什么,或者x是用来存储你想在列表中做什么的索引的?在第一次阅读之后,你还不完全清楚你想要什么,因为你可以看到我们已经有了三种不同的解决方案。请澄清这个问题。@loki不是,R使用了
x
的整数部分,请参见
alist[x[2]]
返回以第三个元素
5.9
命名的列表,如
x[2]
已被分配值
3.4
。您的用户名适用于此。将数字数据存储为名称是一个坏主意,@Roland,这将是一个软错误;)我只回答了问题要求的内容。不清楚您是否回答了问题。您提供了一个名称向量为向量
x
的列表,强制为OP询问是否可能“如果数字向量是列表元素本身的名称…”。他们想将
x
视为一个单一的名称,而不是名称向量。@灾难性的失败我同意,这不是最清楚的问题。您的解释是合理的。事实上,+1,因为这可能是他们的想法。虽然此解决方案可行。但需要在脚本末尾执行额外的步骤以返回字符er向量返回到数字向量。如果我错了,请纠正我,但是字符形式是否会使遍历列表以查找匹配名称的速度变慢?@JulianS我确实说过这很麻烦。没有直接的方法使用实际的数字向量作为名称,因为名称需要是字符串。将这样的向量转换为字符串是一种错误很可能不是最好的主意,但我的回答说明了如何做到这一点。正如我在最后暗示的那样,我怀疑这种方法回答了您实际提出的问题(“X”),但没有回答您可能应该提出的问题(“Y”,不管是什么)。@JulianS A(列表)名称必须是R中的
字符。
x <- c(1.2,3.4,5.9)
alist <- list()
alist[[paste(x,collapse = " ")]]$somevar <- 2