【发布时间】:2019-05-09 23:33:54
【问题描述】:
我确定这个问题是重复的,但我找不到正确的解决方案。我有一个很大的嵌套列表,它实际上是来自 lapply dist() 的类“dist”输出的列表。我现在想从每个列表中提取最后一行(因为我只关心原始列表的最后一行与同一个嵌套列表中的所有其他行之间的距离。我可以将其转换为矩阵,但这并没有真的帮了我。
从Extract then row.bind data.frames from nested lists 和R - Extracting information from list of lists of data.frames 以及其他一些相关帖子中我更接近了。
我可以使用这个从每个嵌套列表中提取第一个元素(对应于第一列),但我想要行:
sapply(df,'[[',1)
这确实做了一些事情,但不确定到底是什么:
lapply(df, function(x) lapply(x, '[' , drop = FALSE))
我对 dist() 的原始输入如下。我有一个包含 x、y、z 坐标的 1000 个列表的嵌套列表(有很多行,这是一个示例):
[[1]]
x y z
-5.924184e-02 -0.0101882607 0.0017658100
-8.884432e-02 0.0454085919 -0.1072237461
1.495407e-02 0.0592509097 -0.0107400982
然后我用这个函数创建了 1000 个距离矩阵:
[[2]]
5.211102e-02 -0.0141554617 -0.0176815372
-2.861500e-02 -0.1155798724 0.0561973096
2.230498e-03 -0.0264566373 -0.0501298532
lapply(orig.df[1:1000],dist) -> df
这是 str(df) 的顶部输出
str(df)
List of 1000
$ :Class 'dist' atomic [1:2628] 0.126 0.102 0.136 0.104 0.139 ...
.. ..- attr(*, "Size")= int 73
.. ..- attr(*, "Labels")= chr [1:73] "2" "8" "10" "14" ...
.. ..- attr(*, "Diag")= logi FALSE
.. ..- attr(*, "Upper")= logi FALSE
.. ..- attr(*, "method")= chr "euclidean"
.. ..- attr(*, "call")= language FUN(x = X[[i]])
基本上我现在想做的是:
df[1:1000][nrow(df),]
对于所有 1000 个嵌套列表(距离矩阵),取最后一个“行”和所有“列”。这是类 dist 的距离矩阵。看起来很简单,但让我很难过。感谢您的帮助。
【问题讨论】:
-
您是否要求输入 dist() 的示例?我正在尝试为所有 1000 个距离矩阵提取距离矩阵的最后“行”,这些距离矩阵都在一个列表(df)中。我看看能不能修改一下。
-
“我现在想从每个列表中提取最后一行” 你的意思是每个
distance 矩阵的最后一行吗? -
是的,完全正确!我有 1000 个嵌套距离矩阵。如果我不将我的 df 转换为矩阵,它们是类“list”和 typeof “list”,所以我认为我使用了正确的术语。谢谢。
-
我没有否决你的问题;但我想,否决票是由于您的帖子不包括任何可重现的最小样本数据,这始终是good questions 询问如何做 XYZ 的关键组成部分。我已经在下面发布了一个答案(基于一些最小的样本数据),请看一下。
-
附言。一般来说,我同意你的看法,因为如果没有任何额外的 cmets,投票可能难以解释。然而,被否决的原因往往非常一致:缺乏样本数据、数据/代码作为屏幕截图、没有代码尝试、多个问题或没有特定问题。所以我想说,通过该列表来查看您的问题在哪里不足通常是一个很好的起点。如果您勾选了所有方框并且仍然收到反对票,那就是事情变得棘手的时候。无论哪种方式,都不要将 DV 带入私人领域并坚持下去。