Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中反转Lappy的函数参数?_R_Parameters_Lapply - Fatal编程技术网

如何在R中反转Lappy的函数参数?

如何在R中反转Lappy的函数参数?,r,parameters,lapply,R,Parameters,Lapply,我一直在想:在R中,什么是推荐的方法来反转顺序相关函数的函数参数,以允许对项目列表应用样式处理 举个简单的例子,假设我有一个数字列表和一个除数 numerator = list(5, 10, 15, 250) denominator = 2 我想把每个数除以除数。我知道在这种情况下我可以很容易地使用数字向量: as.numeric(numerator)/denominator # [1] 2.5 5.0 7.5 125.0 但在现实世界中,列表可能包含更复杂的数据结构,因此无法进

我一直在想:在R中,什么是推荐的方法来反转顺序相关函数的函数参数,以允许对项目列表应用样式处理

举个简单的例子,假设我有一个数字列表和一个除数

numerator = list(5, 10, 15, 250)
denominator = 2
我想把每个数除以除数。我知道在这种情况下我可以很容易地使用数字向量:

as.numeric(numerator)/denominator
# [1]   2.5   5.0   7.5 125.0
但在现实世界中,列表可能包含更复杂的数据结构,因此无法进行向量转换。这只是一个简单的例子。相反,我们可以像这样使用Lappy(或sapply)来得到相同的答案:

sapply(numerator, "/", denominator)
# [1]   2.5   5.0   7.5 125.0
所以这里有一个问题:如果你想把参数转换成函数,你会怎么做?如中所示,将“分母”除以每个数字,而不是反过来?通常为“/”提供分子,然后是分母。但是现在我想用分子除以分母,“/”函数不能再与sapply一起使用(这要求列表项是函数的第一个参数)

我想要这个结果:

denominator/as.numeric(numerator)
# [1] 0.4000000 0.2000000 0.1333333 0.0080000
我通常这样做的方式是编写一个新函数来反转参数:

inverse_divide = function(denominator, numerator) {
    return(numerator/denominator)
}
现在,它起作用了:

sapply(numerator, inverse_divide, denominator)
# [1] 0.4000000 0.2000000 0.1333333 0.0080000

但这已经过时了。有更简单的方法吗?

您可以使用
mapply
。它可以从
向量
列表
中获取相应的元素,并对
/
进行除法。在这种情况下,“分母”只有一个元素,因此它将被回收。如果“分子”和“分母”中的元素长度相同,则如上所述使用相应的元素

 mapply(`/`, denominator, numerator)
 #[1] 0.4000000 0.2000000 0.1333333 0.0080000

 mapply(`/`, numerator, denominator)
#[1]   2.5   5.0   7.5 125.0
另一种方法是

sapply(numerator, function(x) denominator / x)
## [1] 0.4000000 0.2000000 0.1333333 0.0080000