我有一个由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
)
我尝试了以下代码:
for(i in 1:23){
z =(list [[i]] $ a - list [[i]] $ b)/ list [[i]] $ c }
它只给了我49个值,而不是1566个值。
任何人都知道我的代码有什么问题并且能够纠正它吗? 非常感谢你!
答案 0 :(得分:2)
您可以使用功能lapply()
执行此操作。下面的示例假设在所有数据框列中具有相同的名称。
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)
答案 1 :(得分:0)
使用@DidzisElferts回答,你可以使用这个
lapply(ll, within, z <- (a-b)/c)
将z
添加为每个数据框的新列。