【发布时间】:2021-03-09 16:41:44
【问题描述】:
我想知道如何应用我编写的函数来生成数据框列表output,其中包含使用CHANGING_INPUT 的不同元素应用时的函数结果。
函数写成:
function1 <- function(x = 1, y, z) {
output <- ((1 / df1 / scalar1) * scalar2 * -scalar3 * x) + (df2 * (1 - x)) + ((1 / df1 / scalar1) * x * CHANGING_INPUT[y, z])
output
}
目前,该函数采用 3 个常量、两个 9x4 数据帧和另一个标量值,该值从第三个数据帧 CHANGING_INPUT 调用,使用 y 和 z 作为行和列索引。
scalar1 scalar2 和 scalar3 分别为 5100、1.8 和 0.9
df1 和 df2 是:
structure(list(`2011` = c(0.232760280361466, 0.232760280361466,
0.232760280361466, 0.232760280361466), `2015` = c(0.237454196065926,
0.237454196065926, 0.237761576836319, 0.23745419606313), `2020` = c(0.243865255342033,
0.243865255318483, 0.244731985692455, 0.243865255272293), `2025` = c(0.250576929422025,
0.250576929505411, 0.252051235357712, 0.250576929459351), `2030` = c(0.257591865482084,
0.257591865458864, 0.259723510459156, 0.257591865446006), `2035` = c(0.264914318542675,
0.264914318637383, 0.267755064442473, 0.264914318608059), `2040` = c(0.272550046096461,
0.272550046127737, 0.276154096131385, 0.272550046096482), `2045` = c(0.280506234929875,
0.280506234860898, 0.284930672477366, 0.280506234819098), `2050` = c(0.288791456840605,
0.28879145675613, 0.294096688663525, 0.288791456771391)), class = "data.frame", row.names = c("iea6",
"iea4", "rcp8", "rcp6"))
structure(list(`2011` = c(0.00014797328112216, 0.00014797328112216,
0.00014797328112216, 0.00014797328112216), `2015` = c(0.000145048194433412,
0.000145048194433412, 0.000144860674539145, 0.00014504819443512
), `2020` = c(0.000141234971548911, 0.00014123497156255, 0.000140734780958637,
0.000141234971589301), `2025` = c(0.00013745200916718, 0.000137452009121439,
0.000136648020594382, 0.000137452009146705), `2030` = c(0.000133708812332024,
0.000133708812344077, 0.000132611415651631, 0.000133708812350751
), `2035` = c(0.000130012989065563, 0.000130012989019083, 0.000128633616965254,
0.000130012989033475), `2040` = c(0.000126370561639201, 0.0001263705616247,
0.000124721316404496, 0.000126370561639191), `2045` = c(0.000122786227581039,
0.000122786227611232, 0.000120879588359291, 0.000122786227629529
), `2050` = c(0.00011926357786619, 0.000119263577901076, 0.000117112173402963,
0.000119263577894774)), class = "data.frame", row.names = c("iea6",
"iea4", "rcp8", "rcp6"))
CHANGING_INPUT 看起来像这样:
structure(list(low = c(0.423, 0.527, 0.714, 0.432, 0.4, 0.492,
0.548, 0.706, 0.428, 0.612, 0.329, 0.368, 0.399, 0.26, 0.295,
0.9, 1.044), mean = c(0.682, 0.805, 1.082, 0.736, 0.664, 1.382,
0.924, 1.34, 0.847, 1.061, 0.46, 0.525, 0.546, 0.373, 0.429,
1.371, 1.729), high = c(1.05, 1.155, 1.532, 1.159, 1.059, 2.615,
1.494, 2.769, 1.75, 1.699, 0.62, 0.724, 0.715, 0.499, 0.577,
2.009, 2.952)), row.names = c("misc_bra", "misc_chi", "misc_ind",
"misc_eur", "misc_usa", "swch_bra", "swch_chi", "swch_ind", "swch_eur",
"swch_usa", "strw_bra", "strw_chi", "strw_ind", "strw_eur", "strw_usa",
"wsrc_eur", "wsrc_usa"), class = "data.frame")
我想遍历CHANGING_INPUT 的每个元素以生成一个包含 51 个数据帧的列表。当与CHANGING_INPUT 的每个元素(y 和 z 的所有组合)一起应用时,列表的每个元素都应包含函数的输出。 function1 的所有其他输入应在所有迭代中保持不变。
我知道这个问题的答案很可能是一个简单的 for 循环,但我不确定从哪里开始,因为我是 R 的初学者。
【问题讨论】:
-
什么是
scalar1(等)?df1(矩阵或框架)是什么类型的对象?如果您提供了模棱两可的数据,这将有所帮助,最好是dput(x)对于您使用的每个变量的输出。谢谢! -
嗨。抱歉,我是新手,这是我发布的第一个问题。我已听从您的建议并编辑了我的问题。我希望这对您现在更有意义。