我正在创建一个列表,当我创建列表时,列表元素需要有一个标签。 (我正在创建一个朴素贝叶斯似然表列表。)
这是我正在做的一个简化示例:
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"
虽然我们不需要循环。如果我们需要复制一个 'value' 即 '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
关于r - 为什么列表标签按字面意思使用标签名称,如何防止这种情况发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48790468/