我正在创建一个列表,并且在创建列表时,列表元素需要具有标签。(我正在创建朴素贝叶斯可能性表的列表。)
这是我正在做的简化示例:
list1 <- list()
names <- c("An", "example")
for (i in names){
list1 <- append(list1, list(i = "hello"), after=length(list1))
}
输出:
$i
[1] "hello"
$i
[1] "hello"
如您所见,我用来将列表元素标记为“ i”的方法从字面上看是“ i”,而不是像在for循环参数中那样对其进行解释。
我以前从未在for循环中遇到过这种情况。
问题
为什么会这样呢?
我该怎么做才能停止对迭代器的字面解释?
我想看到的输出是:
$"An"
[1] "hello"
$"example"
[1] "hello"
根据OP的代码,我们可以将其修改为带有“ i”的名称集
for (i in names){
list1 <- append(list1, setNames(list("hello"), i), after=length(list1))
}
list1
#$An
#[1] "hello"
#$example
#[1] "hello"
但是我们不需要循环。如果我们需要复制一个“值”即“ hello”,请用包裹它list
,使用rep
来复制它并用setNames
setNames(rep(list("hello"), 2), names)
#$An
#[1] "hello"
#$example
#[1] "hello"
在OP的代码中,当我们执行'i = value'时,它只是将列表元素命名为'i',而不是检索存储在对象中的值
list(i = 1, i = 2)
#$i
#[1] 1
#$i
#[1] 2
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句