假设: 有两个函数:
f1 = function (x) x+1 # index : "x" f2 = function (x) x-1 # index: "y"
一个向量:
xy = c( "x","y","y","x","x")
想要的结果: 类似c( f1,f2,f2,f1,f1)函数序列格式。
c( f1,f2,f2,f1,f1)
能想到的方式是用lapply + 设计一个内部包含if的函数,然后逐一判断。不知有没有其他更优美、更快的实现方式?
medo 没明白,现在你有f1,f2两个函数,要根据index是x或者y执行f1或者f2吗?
我能想到的就是合并f1 f2并把index也作为函数的一个参数…
R的if else、switch 对应一向量的判断语句,如果对应数学计算,一种方式是借鉴sign、delta函数(http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html)将判断语句变成加减乘法的向量化处理,但对函数的选择就不能用这种方法。
tctcab 根据x 、 y 索引形成的函数序列不执行。生成函数序列后,后续准备放在uniroot函数中去求解。
一个处理方式:
f1 = function (x) x+1 # index : "x" f2 = function (x) x-1 # index: "y" xy = c( "x","y","y","x","x") c(f1,f2)[match(xy,c("x","y"))]
medo 这不就是个普通的索引问题么:
c(x = f1, y = f2)[xy]
我歪个楼,代码块要放在一对三个反引号里 ```
yihui 研读基础多少遍都不算多。