首页 > 解决方案 > 我无法将数组中的向量而不是整个数组称为单个向量

问题描述

我正在创建一个包含一万个向量的数组,其中每个向量有 4 个字符向量,可以是“赢”或“输”。

然后,如果每个向量中的任何一个字符向量为“win”,我想调用每个单独的向量并使用“any”函数返回 TRUE,否则返回 false。AKA 如果向量是 c("lose", "lose", "lose", "lose"),则返回 FALSE,否则返回 TRUE。

我当然希望一次完成这一切,我认为这可以通过将向量数组传递给“any”函数并返回一个数组来完成,就像其他一些函数允许的那样,或者通过使用“apply”带有数组和“any() == TRUE”参数的函数。

B <- 10000

set.seed(1)

a <- replicate(B, sample(c("lose","win"), 4, replace = TRUE, prob = c(0.6, 0.4)))

选项1

celtic_wins <- any(a[,1:10000] == "win")

或者

选项 2

celtic_wins <- apply(a, any() == "win")

在这两种情况下实际发生的情况(我认为但不能确定)是数组被解析为向量的向量,然后 r 将其视为单个 40,000 元素长的向量,检查是否存在单个“win”字符向量在整个批次中(类似于 99.99999999....% 的情况),因此返回单个 TRUE 语句,而不是 10,000 个布尔值。

如果是这种情况,我不知道如何解决;请帮忙?

标签: r

解决方案


您可以通过检查总和是否为正来查看是否'win'是列的一部分。将给出一个与 具有相同维度的矩阵,如果对应的元素是,则其元素等于,否则。创建一个向量,其第 i 个元素是矩阵中第 i 列的总和。xx == 'win'a == 'win'aTRUEa'win'FALSEcolSums(a == 'win')a == 'win'

colSums(a == 'win') > 0

推荐阅读