R 对列表中每个元素的多列应用计算

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 >

我有一个由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 
>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我用code
z=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)
将它们转换为数据帧。