3-4列表的子集
构建列表的子集:[[]]/$/[[]][]/[[]][[]]
嵌套列表/不完全匹配(partial matching)
1.x<-list(id=1:4,height=170,gender="male")
x[1](列表中的第1个元素) = x["id"]
x[[1]](只拿到内容 而不是元素名称加内容)=x[["id"]] = x$id
y<-"id"
x[["id"]]=x[[y]] 但不可以直接x$y
2.x<-list(a=list(1,2,3,4),b=c("Monday","Tuesday"))
x[[1]] x[[1]][[2]](x第1个元素中第2个元素的内容)
x[[c(1,3)]](拿到第1个元素中的第2个元素)
x[[c(2,2)]](拿到第2个元素中的第2个元素)
不完全匹配:
l<-list(asdfghj=1:10)
l$asdfghj=l$a(这就是列表的不完全匹配)
l[["a"]](精确匹配 结果显示NULL)
l[["a",exact=FALSE]](后面的函数就关掉了精确匹配)
x<-list(asdfghj=1:10,b=1:2,aaa=3:5)(当元素名称会造成混淆时R会返回NULL)
列表的子集
——[[]] / $ /[[]] [] / [[]] [[]]
——嵌套列表/不完全匹配 (partial matching)
视频关闭了完全匹配
列表的子集
x <- list(id=1:4,height=170,gender="male") #创建列表
x[1] #输出id和1234
x[[1]] #输出1234
x[["id"]] #输出1234
x$id #输出1234
x[c(1,3)] #输出第1和第3两个元素
x$名字 #不能 引用名字的变量
获取嵌套列表中列表的内容:
x[[i]][[j]]
x[[c(i,j)]]
列表的不完全匹配
l <- list(asdfghj = 1:10)
# l$asdfghj 与 l$a的结果相同那个
x[["a",exact = FALSE]] #关闭精确匹配,输出结果与上相同
3-4列表的子集
3-4列表的子集
不完全匹配
exact 控制是否精确匹配
当列表名称首字母相同,单独输入一个字母无法进行不完全匹配,需要输入到不相同字母才能继续进行
列表的子集
如何从列表中获取嵌套的子集
拿到x列表中第一个元素中的第二个元素的内容
x[[1]][2]拿到的是第一个列表中的第二个元素,而不是第一个列表中第二个元素的内容
列表的子集
嵌套的[[]]用来只获取内容,单独的[]获取到的是名称和内容
x[1]和x["id"]是拿到名称和内容,x[[1]]和x[["id"]]和x$id是只拿到内容
拿到第一个和第三个元素
使用$只能使用变量的名字,而不能使用包含名字的变量
列表的子集
当元素含有的首字母出现重复时
不完全匹配
精确匹配,exact=FALSE
引用$符号只能是元素的名称,而不能是变量
嵌套中想要得到元素内容,可以使用两种方式,连续使用或者使用c函数
想拿到列表中的元素x【1】或者x【“id”】
想拿到元素的内容x【【1】】或者x【【“id”】】或者x$id
用[ ]得到的是对应元素的名字和内容,用[[ ]]或$得到的仅有内容
得到嵌套列表中的元素:用[[ ]][ ]或[[c()]]
不完全匹配指名字可不完整输入,用[[ ]]获取内容时需要输入exact=FALSE,关闭精确匹配,即可进行不完全匹配
构建列表的子集所用到的符号,获得嵌套列表中的元素及出现不完全匹配的问题
在列表情况下直接使用[]得到的是名称+数据,想要直接的到数据用[[]],或者使用$;
同样可以用c( , )拿到列表中的多个元素;
[]可以用变量代替原名称,但$不行;
想拿到嵌套的列表中的内容可以接连使用两个[[]],或者用[[c( , )]];
列表的不完全匹配;
[[, exact = FALSE]]可以开启[[]]下的不完全匹配;
只拿到内容,两个中括号嵌套
$只能用于引用名字而不能用于名字里包含的变量
x[[第几个vector]][[第几个元素]]
嵌套做不完全匹配时后面加",exact=FALSE"
#取出列表中某一个元素
x<-list(id=1:4,heigh=170,gender="male") x[1] x["id"]#两个函数作用相同
#取出列表中某一个元素的内容
x<-list(id=1:4,heigh=170,gender="male") x[[1]] x[["id"]] x$id#三个函数作用相同
#同时取出列表中多个元素
x<-list(id=1:4,heigh=170,gender="male") x[c(1,3)]
#列表的不完全匹配
x<-list(a=list(2,3,4,5),b=c("Monday","Tuesday")) x x[[1]][[2]]#第1个元素中的第2个元素,嵌套的两个方括号 x[[2]] x[[1]][2] x[[c(1,3)]]#取出列表中第1个元素中的第3个元素 x[[c(2,2)]]#取出列表中第2个元素中的第2个元素 l<-list(asdfghj = 1:10) l$asdfghj l$a#与上一个命令得出相同结论,称之为列表的不完全匹配 l[["asdfghj"]]#取出名为asdfghj的元素,要打双引号 l[["a"]]#得出的结果为空 l[["a",exact=FALSE]]#第二个命令为关闭了精准匹配以进行不完全匹配 rm(x) x<-list(asdfghj = 1:10,b=c("a","s","d"),aaa=2:11) x$a#出现两个元素前部分相同时,R将不能识别 x[["a",exact=FALSE]]#出现两个元素前部分相同时,R将不能识别 x$aa#能识别了
subset of list
[[]] / $ / [[]][[]] / [[]][]
嵌套列表中的元素以及不完全匹配(partial matching)
x<-list(id=1:4, height=170, gender="male")
x[1] #运行之后得到列表中的第一个元素 名字:id,内容: 1 2 3 4
x["id"] # 结果一样
x[1]和x["id"] 可以拿到列表中某一个元素,输入下标or输入元素名称
list如果只是用一对[],只能拿到元素的名字,不能拿到内容,
想直接拿到列表中某一个元素的内容,要使用嵌套的方括号 x [ [ 1 ] ], 同理可以输入x[["id"]]
也可以输入:x$id, 输出结果同样是1,2,3,4的内容
x[c(1,3)] # 拿到list中第一个元素和它的内容,以及第三个元素和它的内容
y<-"id"
x[["id"]] 和 x[[y]] 返回值都是1 2 3 4,
但是!!!: x$id 和 x$y(返回值为NULL)
列表中获取嵌套的元素
x2<-list (a=list(1,2,3,4), b=c("Monday","Tuesday"))
x2[[1]] [[2]] #拿到列表x2 第一个元素中的第二个元素内容
x2[[1]][2] #拿到的是子列表中的第二个元素,而不是第二个元素的内容
x2[[c(1,3)]] #列表中第一个元素中的第三个元素,拿到内容3
x2[[c(2,3)]] #列表中第二个元素中的第二个元素,拿到内容"Tuesday"
总结:想获得嵌套列表中的内容,可通过[[]][[]] or [[c()]]获得
#partial matching
l<-list(asdfgh= 1:10)
l$asdfgh
l$a #也可以匹配
但是l[["a"]] 为空NULL,因为在我们的列表中,没有返回值为a的元素
l[["a", exact = FALSE ]] #关掉了精确匹配,就可以进行不完全匹配了
列表的子集:
可通过[],填写标号或名称,无法直接得到元素的内容,而是元素的名字和内容。
要想只得到元素的内容,可以用[[]]或列表名$元素名。
想获得嵌套列表中的内容时,可通过[[]][[]]或者[[c()]]获得。
不完全匹配:列表名[["不完全元素名",exact=FALSE]]或者直接$不完全元素名 #关闭不完全匹配,只能唯一标识的