我有一个看起来像这样的函数:
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
值的新向量/列表,但是出了点问题,并且这些值根本不是应该的值(我不确定它实际上在做什么)诚实)。
答案 0 :(得分:1)
您需要mapply
:
假设您要为n=2
至n=4
执行此操作,并且您的数据存储在名为df
的数据框中,然后:
mapply(calc_func, n=seq(2,4), MoreArgs = list(data=df))