我在R中有一个m × 23的矩阵'temp',假设m=100。当我运行下面的短代码时,我得到错误“Error in temp[i,2:23]:subscription out of bounds”
在控制台中,当我检查j和i的值时,我分别得到1和101。这告诉我索引超过了100,但我看不出这个命令有什么错误。
for(j in 1:nrow(temp)-1){
for(i in j+1:nrow(temp)){
if(identical(temp[j,2:23],temp[i,2:23])){
#Do something
}
}
}
字符串
目标:目标是计算矩阵中每个唯一行的数量(计算重复行)。我相信可能有一个更简单的方法来做到这一点,我将感谢任何建议。谢谢
我尝试一次执行一个循环,错误似乎发生在我添加if语句时。
3条答案
按热度按时间2mbi3lxu1#
问题发生在语句
j+1:nrow(temp)
处,应该是(j+1):nrow(temp)
两个表达式肯定会给出给予不同的输出。
字符串
读取precedence of operators in R时,您将看到
:
的优先级高于加法+
的数据
eulz3vhy2#
也可能是围绕第一个
for
-语句:字符串
创建于2023-11-09带有reprex v2.0.2
3lxsmp7m3#
内部循环的逻辑实际上是
1:nrow(iris)-1 + 1:nrow(iris)
。将cat(j,i,"\n")
作为#do来观察输出。R有一个内置的方法来识别重复的行:
duplicated()
标识第二个(第三个等)重复(不是第一个观察,因为那个不是重复;但您可以fromLast
反向进行)字符串