我正在尝试创建一个函数,该函数返回给定公式的梯度函数。最小的例子是(不将其封装在函数中):
f1 <- deriv(y ~ a0 + a1*x + a2*x^2, c('a0', 'a1', 'a2'), function(a0, a1, a2, x){} )
grad <- attr(f1(a0 = 1, a1 = 2, a2 = 1.5, x = 3),"gradient")
我知道f1并不依赖于a,b和c,因为它是线性的,但它可能会这样做。
现在,我想创建一个使用公式和变量并返回f1
的函数,如示例所示。一些轮廓(不起作用)将是:
gradient_function <- function(formula, variables){
f1 <- deriv(formula, variables, function(variables, x){} )
return(f1)
}
问题在于如何告诉R我第二次使用variables
,这是从deriv
创建的函数的参数。
我已经搜索了一段时间,唯一可行的解决方案是eval(parse())
,这感觉很古怪,并且在要使用命名参数评估函数时会带来一些额外的烦恼,这也意味着使用单精度和双精度引号,整个表达式得到类似的内容:
但是我想知道是否还有一种我不知道的更好的方法,这并不意味着构建一个令人毛骨悚然的字符串。
formula <- y ~ a0 + a1*x + a2*x^2
vars <- paste0("a", 0:2)
vector <- "c('a0', 'a1', 'a2')"
eval(parse(text = paste0("f2 <- deriv(", formula, ",", variables, ", function(", paste(vars, collapse=","),", x){} )")))
谢谢!
答案 0 :(得分:1)
您可以完全不传递字符向量来执行此操作-仅使用裸变量作为输入即可。您可以使用以下功能:
.tabs_indicators li{
height:5px;
display: inline-block;
cursor:pointer;
width:5px;
border-radius:50%;
background:green;
}
ul{
list-style:none;
}
您可以这样制作<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div class="content_wrapper">
<div class="tabs_wrapper">
<ul class="tabs tab_border">
<li data-id="contentOne" class="active">tab 1
</li>
<li data-id="contentTwo">
tab 2
</li>
<li data-id="contentThree">
tab 3
</li>
<li data-id="contentFour">
tab 4
</li>
<li data-id="contentFive">
tab 5
</li>
<li data-id="contentSix">
tab 6
</li>
</ul>
<div class="d_flex">
<div class="tabs_wrapper tabs_indicators">
<ul class="tabs list_unstyled d_flex">
<li data-id="contentOne" class="active"></li>
<li data-id="contentTwo"></li>
<li data-id="contentThree"></li>
<li data-id="contentFour"></li>
<li data-id="contentFive"></li>
<li data-id="contentSix"></li>
</ul>
</div>
<div class="tab_controller d_flex ">
<span class="tab_btn previous mr-10">left arrow</span><br>
<span class="tab_btn next">right arrow</span>
</div>
</div>
</div>
<div class="tab_content">
<div class="tab_content_item contentOne">
content 1
</div>
<div class="tab_content_item contentTwo">
content 2
</div>
<div class="tab_content_item contentThree">
content 3
</div>
<div class="tab_content_item contentFour">
content 4
</div>
<div class="tab_content_item contentFive">
content 5
</div>
<div class="tab_content_item contentSix">
content 6
</div>
</div>
</div>
</body>
</html>
:
my_func <- function(form, ...)
{
vars <- as.list(match.call())[-(1:2)]
char_vars <- sapply(vars, as.character)
arglist <- lapply(char_vars, function(x) NULL)
f <- as.function(append(setNames(arglist, char_vars), quote({})))
deriv(form, char_vars, f)
}
与原始结果相同:
f1
由reprex package(v0.3.0)于2020-10-14创建