【发布时间】:2018-06-05 15:26:38
【问题描述】:
我在编写带有 r 条件的简单 for 循环时遇到了一些问题。 我有这个数组:
Temp <- c("A", "A", "B", "A", "C", "C", "A", "B")
我想通过使用两个在循环期间递增的索引来计算这个数组中的对数。必须遵循序列的顺序。
这个数组的最终结果应该是:
CountAA = 1
CountAB = 2
CountAC = 1
CountBA = 1
CountBB = 0
CountBC = 0
CountCA = 1
CountCB = 0
CountCC = 1
我已尝试使用此代码,但它给了我一个错误
"Error in if (Temp[i] == "A" & Temp[j] == "A") { :
argument is of length zero"
代码
CountAA = 0
CountAB = 0
CountAC = 0
CountBA = 0
CountBB = 0
CountBC = 0
CountCA = 0
CountCB = 0
CountCC = 0
i = 1
j = 2
for (j in 1:length(Temp)-1){
if (Temp[i]=="A" & Temp[j]=="A"){
CountAA = CountAA + 1
i = i + 1
j = j + 1
}
if (Temp[i]=="A" & Temp[j]=="B"){
CountAB = CountAB + 1
i = i + 1
j = j + 1
}
if(Temp[i]=="A" & Temp[j]=="C"){
CountAC = CountAC + 1
i = i + 1
j = j + 1
}
if(Temp[i]=="B" & Temp[j]=="A"){
CountBA = CountBA + 1
i = i + 1
j = j + 1
}
if(Temp[i]=="B" & Temp[j]=="B"){
CountBB = CountBB + 1
i = i + 1
j = j + 1
}
if(Temp[i]=="B" & Temp[j]=="C"){
CountBC = CountBC + 1
i = i + 1
j = j + 1
}
if(Temp[i]=="C" & Temp[j]=="A"){
CountCA = CountCA + 1
i = i + 1
j = j + 1
}
if(Temp[i]=="C" & Temp[j]=="B"){
CountCB = CountCB + 1
i = i + 1
j = j + 1
}
if(Temp[i]=="C" & Temp[j]=="C"){
CountCC = CountCC + 1
i = i + 1
j = j + 1
}
}
【问题讨论】:
-
在您的代码中,您不必手动增加 i 和 j - 这是通过 for 循环完成的。
1:length(Temp)-1也没有做你想做的事。 -
你能说清楚你想要什么格式作为输出吗?似乎我们都在为您提供不同的东西,但所有格式都可以直接转换为您喜欢的格式。
-
@Moody_Mudskipper:好吧,任何格式都适合我的目的。无论如何,我正在寻找像您提出的那样的数据框。您的代码的唯一问题是只计算现有的夫妇。我需要显示所有可能排列的频率。
-
我编辑了我的答案
标签: arrays r for-loop if-statement counter