问题描述:有一个data.all为data.frame型,分成三个子集,其对应编号的向量假设为s1,s2,s3,现要求做一个循环,分别对这三个子集操作。
> class(data.all)
[1] "data.frame"
> dim(data.all)
[1] 9785 6
最初的想法是把这三个向量合并为一个list,再进行循环
> num.dis<-list(s1=s1,s2=s2,s3=s3)
> View(num.dis)
做一个简单的循环确出现了Error in xj[i] : invalid subscript type 'list'
> for(i in 1:3){
+ data.temp<-data.all[num.dis[i],]
+ }
Error in xj[i] : invalid subscript type 'list'
错误原因为无效的下标类型,由此引出了单括号和双括号访问list对象的不同。通过class()来说明
> class(s1)
[1] "numeric"
> class(num.dis[1])
[1] "list"
> class(num.dis[[1]])
[1] "numeric"
> class(num.dis$s1)
[1] "numeric"
由此,可以看出“针对列表操作,单括号返回一个列表,双括号返回一个向量”[1]。
[1]R语言核心技术手册. 第二版. 北京:电子工业出版社. p79