R语言入门小节#0615#单括号和双括号访问list的区别

问题描述:有一个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)

R语言入门小节#0615#单括号和双括号访问list的区别_第1张图片

做一个简单的循环确出现了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




你可能感兴趣的:(R语言)