我看过this question和this question,但似乎都没有解决检查列表中是否存在整数键的问题。
请考虑以下示例。
mylist=list()
mylist[[5]] = 1
# How do I programmatically check whether 5 is a key for this list?
5 %in% names(mylist) # returns FALSE, because names(mylist) is NULL here.
更新:澄清,使用其他语言,如Python。以下是我尝试在R
中复制的行为。
foo = {}
foo[5] = 1
if 5 in foo: # How do I say "if 5 in foo" in R?
print foo[5]
# Do other stuff
答案 0 :(得分:2)
我认为最好使用逻辑值。这样,每个列表元素都附加了“是”或“否”。这是一个小例子。此外,如果您真的使用整数,请将L
附加到数字1
,否则R将不会将其识别为整数。此外,在R中,如果已知,最好用有限长度初始化列表。
> mylist <- vector("list", 3)
> mylist[[3]] <- 1
> sapply(mylist, is.null)
# [1] TRUE TRUE FALSE
> sapply(mylist, is.integer)
# [1] FALSE FALSE FALSE
> mylist[[3]] <- 1L
> sapply(mylist, is.integer)
# [1] FALSE FALSE TRUE
答案 1 :(得分:0)
似乎列表不像其他语言的词典。使用整数i进行索引时,它将访问列表的第i个元素。
一些示例行为:
mylist = list()
mylist[[3]] = 2
print(mylist)
# [[1]]
# NULL
# [[2]]
# NULL
# [[3]]
# [1] 2
mylist[['a']] = 5
print(mylist[['a']])
# [1] 5
mylist[[4]] = 10
print(mylist[['a']])
# [1] 10
所以我认为你想在R字典中使用列表,最好只坚持使用字符串键。
alexis_laz 5 %in% which(!sapply(mylist, is.null))
给出的答案,只要你确定没有值为空就行。但是字典条目通常可以为null,在这种情况下,所有字母条目都会被分解。此外,它不是特别节省内存,因为列表在使用整数键时不是好的字典替代品。如果你使用的是大整数,那么它将初始化大量的空值列表。
list1 = list()
list2 = list()
list1[[1]] = 5
list2[[1000]] = 5
print(object.size(list1))
# 96 bytes
print(object.size(list2))
# 8088 bytes