R中as.list()与list()生成列表的差异及向量转列表方法
R中as.list()与list()的差异及解决方案
核心差异
- list():作为列表构造函数,传入的参数会直接成为列表的元素。比如
list(a,b)会把变量a、b对应的实际数据框对象,作为列表的两个元素。 - as.list():属于类型转换函数,它会将输入向量的每个元素按原类型(这里是字符串)单独拆分为列表元素。比如
as.list(c("a","b"))得到的是包含两个字符串"a"、"b"的列表,而非对应的数据框对象。
示例验证
先定义两个数据框:
a <- data.frame(l=c("object1", "object2")) b <- data.frame(l=c("object3", "object4"))
创建存储数据框名称的向量:
vector <- c("a","b")
使用as.list()的情况
转换后用lapply循环输出:
list_of_vector <- as.list(vector) lapply(list_of_vector, print)
输出结果:
[1] "a" [1] "b" [[1]] [1] "a" [[2]] [1] "b"
使用list()的情况
手动构造列表后循环输出:
straight_list <- list(a,b) lapply(straight_list, print)
输出结果:
l 1 object1 2 object2 l 1 object3 2 object4 [[1]] l 1 object1 2 object2 [[2]] l 1 object3 2 object4
实现预期输出的方法
如果要把存储对象名称的向量,转换成能输出数据框内容的列表,有两种常用方法:
方法1:使用mget()
mget()可以根据字符向量中的名称,从当前环境中获取对应对象,直接返回包含这些对象的列表:
target_list <- mget(vector) lapply(target_list, print)
方法2:结合lapply()与get()
遍历向量中的每个名称,用get()获取对应的对象:
target_list <- lapply(vector, get) lapply(target_list, print)
两种方法都能得到和list(a,b)完全一致的输出结果。
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

