【发布时间】:2018-07-19 09:55:18
【问题描述】:
我在使用嵌套 for 循环时遇到了一些问题。如果我在不嵌套 for 循环的情况下运行代码,我会得到我想要的结果。我需要它在巢内发生,但我目前收到一条错误消息:
"data.frame(..., check.names = FALSE) 中的错误:参数暗示不同的行数:0, 1"
虽然,当我在 for 循环之外运行它时,我没有得到这个。你对我应该如何继续作为嵌套循环运行有什么建议吗?
这里是示例数据
Route Year ID Amount
1 1 A 5
1 2 A 2
1 3 A 7
1 4 A 1
1 1 B 5
1 2 B 11
1 3 B 0
1 4 B 2
ID_list<- unique(data$ID)
for(i in 1:length(ID_list)){
ID <- data[which(data$ID== ID_list[i]), ]
route_list <- unique(ID$Route)
for(j in 1:length(route_list)){
SP_R <- ID[which(ID$Route == route_list[j]), ]
for(k in 1:(nrow(SP_R)-1)){
for(l in (k+1):nrow(SP_R)){
new_data<- rbind(new_data,cbind(SP_R[k,],SP_R[l,]))
}}}}
这给了我错误。我猜这是因为 k 和 l 的长度不同,但是如果我在 for 循环之外运行最后一部分(作为一个单独的部分 - 见下文)它可以工作。
for(i in 1:length(ID_list)){
ID <- data[which(data$ID== ID_list[i]), ]
route_list <- unique(ID$Route)
for(j in 1:length(route_list)){
SP_R <- ID[which(ID$Route == route_list[j]), ]
}}
for(k in 1:(nrow(SP_R)-1)){
for(l in (k+1):nrow(SP_R)){
new_data<- rbind(new_data,cbind(SP_R[k,],SP_R[l,]))
}}
我不知道为什么会这样。感谢您的意见!
【问题讨论】:
-
ID、all_fifty、SP_R等,它们是什么?请发帖reproducible example。 -
对不起!我添加了一些示例数据,并清除了数据框名称。 ID 只是物种 ID。我基本上想对 ID 进行子集化,然后路由,然后将行组合在一起以获得更大的数据集。
标签: r for-loop nested nested-loops