R 对列表中每个元素的多列应用计算
我有一个由23个元素组成的列表,每个元素有69行13列。我需要对列表中的每个元素的多个列进行计算 作为一个简单的示例,我的列表如下所示:R 对列表中每个元素的多列应用计算,r,list,for-loop,R,List,For Loop,我有一个由23个元素组成的列表,每个元素有69行13列。我需要对列表中的每个元素的多个列进行计算 作为一个简单的示例,我的列表如下所示: >list >$`1` > a b c >1 2.1 1.4 3.4 >2 4.4 2.6 5.5 >3 2.6 0.4 3.0 ... >$`2` > a b c >
>list
>$`1`
> a b c
>1 2.1 1.4 3.4
>2 4.4 2.6 5.5
>3 2.6 0.4 3.0
...
>$`2`
> a b c
>70 5.1 4.9 5.1
>71 4.4 7.6 8.5
>72 2.8 3.5 6.8
...
我想做的是类似于z=(a-b)/c
对于每个元素($1
,$2
…,$23
)
我尝试了以下代码:
因为(我在1:23中){z=(列表[[i]]$a-列表[[i]]$b)/列表[[i]]$c } 这只给了我49个值,而不是1566个值 有人知道我的代码出了什么问题并且能够纠正它吗?
多谢各位 您可以使用函数
lappy()
来完成。下面是一个示例,假设所有数据帧中的列都具有相同的名称
ll<-list(data.frame(a=1:3,b=4:6,c=7:9),
data.frame(a=1:3,b=6:4,c=7:9),
data.frame(a=1:3,b=4:6,c=9:7))
lapply(ll, with, (a-b)/c)
ll处理@DidzisElferts的答案,你可以使用这个
lapply(ll, within, z <- (a-b)/c)
lapply(ll,in,z)你每次都要覆盖z
。试着做一个列表,然后写z[[i]]@Carl Witthoft我用codez=vector(“list”,23)
创建了一个列表。谢谢你的建议。谢谢你的回复。这听起来可能很愚蠢,但你能澄清一下“1:3”、“4:6”、“7:9”是什么吗代表,这样我就可以用我的真实数据集复制你建议的代码?顺便说一句,原始数据不是数据框而是列表。谢谢!@cactussss,因为你没有提供我刚刚制作的数据的可复制示例。ll是由三个列表元素组成的列表,每个元素都是数据框。我明白了。谢谢你的回答。它是rks完美!作为后续问题--如何将列表中的无限值替换为零?我尝试了list[is.infinite]==0
这给了我以下错误消息“error in list[is.infinite]:无效的下标类型'builtin'”.Btw,我的列表不是由数据框组成,而是由列表组成。谢谢你的回答Ferdinand。但是如果我列表中的元素不是数据框(我的列表中有23个列表),具体来说,命令class(list[[1]])
会给我结果“list”
。您对如何有效地将它们转换为数据帧有什么想法吗?谢谢。我想做的只是更改列表中元素的类别,但将整个数据集分组(例如从23个列表的列表转换为23个数据帧的列表)如果列表元素是具有相同长度的向量的列表,则可以使用lappy(ll,as.data.frame)
将它们转换为数据帧。