我知道有关将表与向量进行比较的问题已被回答了几次,但似乎R出现了一个奇怪的错误,或者我错过了某些东西(可能是后者)。
我有一个3列矩阵或data.frame(这并不重要,因为同样的事情发生的任何一种方式),我想比较它的行与向量。而且我知道最简单的方法是通过apply(table==vector,1,sum)>(length(vector)-1)
,但由于我一直得到错误的行标记,我开始挖掘部分结果。下面是我的代码和R似乎正在做的错误。
transition_matrix<-cbind(permutations(n=7,r=4,v=c(0,1,2,3,4,5,6),repeats.allowed=T),prob=0,n=1)
vector<-c(1,0,1)
table <- transition_matrix[,c(1:3)]
table[59,]
>0 1 1
(table==vector)[59,]
>TRUE TRUE TRUE
所以我只是困惑地盯着我的代码,老实说不理解为什么它不起作用。我可能会遗漏一些东西,因为如果我直接将第59行与向量进行比较,我会得到正确的结果。
答案 0 :(得分:1)
当您将vector
与matrix
进行比较时,它会按列进行比较
请参阅以下可重现的示例
table <- matrix(c(rep(0,60),rep(1,60),rep(1,60)),ncol=3)
vector <- c(1,0,1)
head(table==vector)
[,1] [,2] [,3]
[1,] FALSE TRUE TRUE
[2,] TRUE FALSE FALSE
[3,] FALSE TRUE TRUE
[4,] FALSE TRUE TRUE
[5,] TRUE FALSE FALSE
[6,] FALSE TRUE TRUE
1,1
因为vector[1]==1
和table[1,1]==0
而错误。 2,1
为{0},因为vector[2]==0
和table[2,1]==0
等
head(t(apply(table,1,function(x) x==vector)))
[,1] [,2] [,3]
[1,] FALSE FALSE TRUE
[2,] FALSE FALSE TRUE
[3,] FALSE FALSE TRUE
[4,] FALSE FALSE TRUE
[5,] FALSE FALSE TRUE
[6,] FALSE FALSE TRUE
答案 1 :(得分:1)
正如Chi Pak所说,var username = document.getElementById("steamAccountName").value
document.getElementById("login_twofactorauth_message_entercode_accountname").innerText = username
正在按列操作,但您希望将每一行与向量进行比较。
获得所需行为的一种方法是在与向量进行比较之前转置矩阵,然后再重新转置。
示例数据:
table == vector
计算:
(table <- matrix(rep(0:2, 4), 4))
# [,1] [,2] [,3]
# [1,] 0 1 2
# [2,] 1 2 0
# [3,] 2 0 1
# [4,] 0 1 2
(vector <- c(0, 0, 1))
# [1] 0 0 1
与使用t(t(table) == vector)
# [,1] [,2] [,3]
# [1,] TRUE FALSE FALSE
# [2,] FALSE FALSE FALSE
# [3,] FALSE TRUE TRUE
# [4,] TRUE FALSE FALSE
的方法相比,这样做的一个优点是所有操作都是矢量化的,这意味着这对大型矩阵来说效率会更高。为了看到这一点,让我们看一下有一百万行的矩阵:
apply