Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将列表的类从数组更改为列表?_R - Fatal编程技术网

R 如何将列表的类从数组更改为列表?

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

我有一个数据框,其中的名称和值必须转换为向量列表。名称决定每个值必须分配到哪个向量。要自动创建我的列表,我使用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_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