R 如何将列表的类从数组更改为列表?
我有一个数据框,其中的名称和值必须转换为向量列表。名称决定每个值必须分配到哪个向量。要自动创建我的列表,我使用tapply:R 如何将列表的类从数组更改为列表?,r,R,我有一个数据框,其中的名称和值必须转换为向量列表。名称决定每个值必须分配到哪个向量。要自动创建我的列表,我使用tapply: d_df <- data.frame(name=c(rep("a",5),rep("b",5)),value=LETTERS[1:10]) d_list_auto <- tapply(d_df$value,d_df$name, FUN=as.character) d_list_auto <- unname(d_list_auto) d_list_manu
d_df <- data.frame(name=c(rep("a",5),rep("b",5)),value=LETTERS[1:10])
d_list_auto <- tapply(d_df$value,d_df$name, FUN=as.character)
d_list_auto <- unname(d_list_auto)
d_list_manual <- list(LETTERS[1:5],LETTERS[6:10])
我试图用as.list()和不同风格的apply函数强制更改类,但没有成功:
class(as.list(d_list_auto)) #array
apply(d_list_auto,1,as.list) #Creates a list of lists
如何在不丢失数据结构的情况下将d_list_auto强制放入类列表
编辑
一个非常糟糕的解决方案:
class(apply(d_list_auto,1,as.list)) #list
有人有更优雅的建议吗?首先让我们看看每个对象的结构:
str(d_list_auto)
# List of 2
# $ : chr [1:5] "A" "B" "C" "D" ...
# $ : chr [1:5] "F" "G" "H" "I" ...
# - attr(*, "dim")= int 2
str(d_list_manual)
# List of 2
# $ : chr [1:5] "A" "B" "C" "D" ...
# $ : chr [1:5] "F" "G" "H" "I" ...
看起来唯一的区别是d\u list\u auto
有一个dim
属性,是从tapply()
遗留下来的。我们可以通过将NULL
分配给作为新维度来删除它
dim(d_list_auto) <- NULL
手动执行lappy(split(),…)
可能是另一种选择,但我认为需要unname
d才能精确匹配输出。
dim(d_list_auto) <- NULL
class(d_list_auto)
# [1] "list"
identical(d_list_auto, d_list_manual)
# [1] TRUE