R: Lapply 多重相等
R: Lapply multiple equality
给定列表 test
,我如何找到在 test[[2]]
中准确重复 3 次和在 test[[3]]
中准确重复 4 次的任何数字?在这个特定的例子中,我想要一个输出,在 [[2]] 中给出 3 和 6,在 [[3]] 中给出 10。
test <- list(c(1:10),c(1:10,3,3,6,6),c(1:10,10,10,10))
我能够为每个向量生成一个 table,test2
。
lapply(test,table)
但是当我试图将 table 等同于 1:3
时,我将其存储为 test
的名称,我得到每个向量的 logical(0)
。
names(test) <- 1:3
lapply(test,function(x) table(x)==names(x))
知道哪里出了问题吗?最简单的解决方案是什么?
要生成 table 的列表:
tab <- lapply(test, table)
获取列表中每个对象10
出现的次数:
lapply(tab, '[', "10")
[[1]]
10
1
[[2]]
10
2
[[3]]
10
3
我不确定您的方法是什么,但这将 return 数字出现两次:
lapply(seq_along(test), function(ii) which(tabulate(test[[ii]]) == ii))
# [[1]]
# integer(0)
#
# [[2]]
# [1] 10
#
# [[3]]
# integer(0)
如果您 运行 lapply(test, names)
您会看到 names
函数应用于每个列表元素只是 returns NULL。在幕后,我认为 lapply 只是将子列表的内容而不是子列表本身传递给函数(就像使用双方括号进行子集时一样 - 尝试比较 names(test[[1]])
和 names(test[1])
).
按照你原来的想法,如果你想要的是一个逻辑向量,你可以试试这个:
lapply(1:3, function(x) table(test[x]) == x)
给定列表 test
,我如何找到在 test[[2]]
中准确重复 3 次和在 test[[3]]
中准确重复 4 次的任何数字?在这个特定的例子中,我想要一个输出,在 [[2]] 中给出 3 和 6,在 [[3]] 中给出 10。
test <- list(c(1:10),c(1:10,3,3,6,6),c(1:10,10,10,10))
我能够为每个向量生成一个 table,test2
。
lapply(test,table)
但是当我试图将 table 等同于 1:3
时,我将其存储为 test
的名称,我得到每个向量的 logical(0)
。
names(test) <- 1:3
lapply(test,function(x) table(x)==names(x))
知道哪里出了问题吗?最简单的解决方案是什么?
要生成 table 的列表:
tab <- lapply(test, table)
获取列表中每个对象10
出现的次数:
lapply(tab, '[', "10")
[[1]]
10
1
[[2]]
10
2
[[3]]
10
3
我不确定您的方法是什么,但这将 return 数字出现两次:
lapply(seq_along(test), function(ii) which(tabulate(test[[ii]]) == ii))
# [[1]]
# integer(0)
#
# [[2]]
# [1] 10
#
# [[3]]
# integer(0)
如果您 运行 lapply(test, names)
您会看到 names
函数应用于每个列表元素只是 returns NULL。在幕后,我认为 lapply 只是将子列表的内容而不是子列表本身传递给函数(就像使用双方括号进行子集时一样 - 尝试比较 names(test[[1]])
和 names(test[1])
).
按照你原来的想法,如果你想要的是一个逻辑向量,你可以试试这个:
lapply(1:3, function(x) table(test[x]) == x)