r - lis[[i]] : attempt to select less than one element 中出现错误

标签 r

这段代码的目的是计算某些给定坐标的总距离,但我不知道为什么它不起作用。

错误是:lis[[i]] 中的错误:尝试选择少于一个元素。

这是代码:

distant<-function(a,b)
{
  return(sqrt((a[1]-b[1])^2+(a[2]-b[2])^2))
}
totdistance<-function(lis)
{
  totdis=0
  for(i in 1:length(lis)-1)
  {
    totdis=totdis+distant(lis[[i]],lis[[i+1]])
  }
  totdis=totdis+distant(lis[[1]],lis[[length(lis)]])
  return(totdis)
}
liss1<-list()
liss1[[1]]<-c(12,12)
liss1[[2]]<-c(18,23)
liss1[[4]]<-c(29,25)
liss1[[5]]<-c(31,52)
liss1[[3]]<-c(24,21)
liss1[[6]]<-c(36,43)
liss1[[7]]<-c(37,14)
liss1[[8]]<-c(42,8)
liss1[[9]]<-c(51,47)
liss1[[10]]<-c(62,53)
liss1[[11]]<-c(63,19)
liss1[[12]]<-c(69,39)
liss1[[13]]<-c(81,7)
liss1[[14]]<-c(82,18)
liss1[[15]]<-c(83,40)
liss1[[16]]<-c(88,30)

输出:

> totdistance(liss1)
Error in lis[[i]] : attempt to select less than one element
> distant(liss1[[2]],liss1[[3]])
[1] 6.324555

最佳答案

让我以简单的方式重现您的错误

>list1 = list()  
> list1[[0]]=list(a=c("a"))  
>Error in list1[[0]] = list(a = c("a")) : 
attempt to select less than one element

那么,下一个问题是您在哪里访问 0 索引列表? (R 中列表的索引从 1 开始)

正如 Molx 所言,在之前的帖子中指出:“: 运算符在减法之前进行计算 - ”。这导致 0 索引列表访问。

例如:

> 1:10-1  
[1] 0 1 2 3 4 5 6 7 8 9  
>1:(10-1)  
[1] 1 2 3 4 5 6 7 8 9

因此请替换以下代码行

>for(i in 1:(length(lis)-1))  
{     
     totdis=totdis+distant(lis[[i]],lis[[i+1]])  
}

关于r - lis[[i]] : attempt to select less than one element 中出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30020466/

相关文章:

r - 强制评估 data.table 中的 .SD

r - Tidyr 与可选组分开

R:使用相同的 ifelse 条件将多个变量转换为有序因子

r - 根据日期计算数据表中的前几行

linux - 使用 R Markdown 将 bash 脚本作为 Cron 作业运行

"barplot-like "图中的 R ggplot 排序条

r - R 中最近 50 个条目的平均值

r - 根据两个协变量级别的对应关系选择数据帧的行

r - 如何删除多种语言的停用词?

javascript - 如何在使用 highcharter 制作的箱线图中添加平均线?