我曾经在C ++中工作,我认为我误解了for循环(或迭代)如何在R中工作。我想在for循环中更改列表项,但for循环似乎只是临时副本而且只是改变了吗?我怎么能阻止这个?这似乎是一个微不足道的初学者问题,但我无法在stackoverflow上找到关于为什么会发生这种情况的教程/问题。
代码:
myList <- list(a=1, b=1, c=1, d=1)
for(item in myList){item <- 3}
myList
# Expected output: 3,3,3,3 - Real output: 1,1,1,1
# Additionally, I now have a variable "item" with value 3.
答案 0 :(得分:1)
for(item in myList)
创建一个名为item
如果您想参考列表中的项目,最好通过调用myList[1]
的位置或myList[["a"]]
的名称来执行此操作。
您可以使用索引遍历列表(作为建议的评论之一)。
myList <- list(a=1, b=2, c=4, d=5)
for(i in 1:length(myList)){
myList[i] <- 3
}
myList
但我会推荐一种矢量方法。看看这个:
myList <- list(a=1, b=2, c=1, d=5)
myList=='1'
myList[myList=='1']=3
myList
myList[names(myList)=='a']=9
myList
现在你没有任何冗余变量。
这实际上是R中推荐的方法。For循环计算成本太高。
答案 1 :(得分:1)
如@nicola所述,myList <- list(a = 1, b = 1, c = 1, d = 1) # output: 1,1,1,1
lapply(myList, function(x) 3) # output: 3,3,3,3
# lapply iterates over every list item
应该是一个不错的选择。以下是基于您的问题的示例。
<input type="text" id="txt_invoer" value="1">
<button onclick="countUp()">+</button>
<button onclick="countDown()">-</button>