使用列表数据进行矢量计算

时间:2018-08-26 15:20:48

标签: r

我有一个看起来像这样的函数:

calc_func <- function(data, n) {
    return(sum((data[1]**(1/n))*(data[2]/sum(data[2]))**n)
}

基本上data只是两列列表(从.txt文件加载),看起来像这样:

       col_data1      col_data2 
1      0.005          1.921053e+01
2      0.015          9.410499e-01
3      0.025          7.493472e-01
4      0.035          6.231897e-01
5      0.045          5.354181e-01

因此,如果n = 0.5或类似的东西,只需将col_data1的每个单个值乘以1/n的幂,然后将所有乘积求和为{{1} },然后将所有内容汇总为一个值。

但是,我需要为“许多” n(例如n)执行此操作,并且我知道我可能可以创建一个简单的循环并遍历n <- seq(0.1, 1, 0.01)并获得n的值,但是由于以前和将来的计算,我真的很想避免由于速度而引起的循环。那么,有没有一种方法可以使用向量length(n),其中每个单独的值都将用作函数中的单独输入?如果我只是运行此命令,那么我的确会得到一个带有n值的新向量/列表,但是出了点问题,并且这些值根本不是应该的值(我不确定它实际上在做什么)诚实)。

1 个答案:

答案 0 :(得分:1)

您需要mapply

假设您要为n=2n=4执行此操作,并且您的数据存储在名为df的数据框中,然后:

mapply(calc_func, n=seq(2,4), MoreArgs = list(data=df))