Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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 使用apply和多参数函数_R - Fatal编程技术网

R 使用apply和多参数函数

R 使用apply和多参数函数,r,R,我想在数据帧上应用一个函数。该函数将V1作为arg1,V2作为arg2,我想将结果写入V3或其他向量 有没有一种简单而紧凑的方法可以做到这一点?我在下面发布了一个(非工作)示例 谢谢 斯图 my.func例如,rowSums(my.df)将完成这项工作。对于更复杂的任务,可以使用mappy功能。例如:mapply(my.func,my.df[a],my.df[b]) 或者,您可以重写函数以获取向量参数: my.otherfunc <- function(x) sum(x) apply(my

我想在数据帧上应用一个函数。该函数将V1作为arg1,V2作为arg2,我想将结果写入V3或其他向量

有没有一种简单而紧凑的方法可以做到这一点?我在下面发布了一个(非工作)示例

谢谢

斯图


my.func例如,
rowSums(my.df)
将完成这项工作。对于更复杂的任务,可以使用
mappy
功能。例如:
mapply(my.func,my.df[a],my.df[b])

或者,您可以重写函数以获取向量参数:

my.otherfunc <- function(x) sum(x)
apply(my.df, 1, my.otherfunc)
my.otherfunc
mapply()
就是为此而设计的

以下任一项都可以完成此工作。第二种方法的优点是,它可以很好地扩展到具有任意数量参数的函数

mapply(my.func, my.df[,1], my.df[,2])
# [1] 5 7 9

do.call(mapply, c(FUN=list(my.func), unname(my.df)))
# [1] 5 7 9

我觉得如果要调用
数据框架内的元素,使用
with
比使用
mappy
更好:

with(my.df,my.func(X=a,Y=b))
#[1] 5 7 9
即使需要从矩阵进行显式转换,它仍然是一种非常干净的方法:

with(data.frame(my.mat),my.func(X=a,Y=b))
#[1] 5 7 9

这里真的不需要
*apply
函数。矢量化就足够了:

my.df$c <- my.df$a + my.df$b
#  a b c
#1 1 4 5
#2 2 5 7
#3 3 6 9

谢谢你的解释。我刚刚发布了sum示例,作为一个函数的简单表示,该函数需要2个参数,显然,如果我想对2个col求和,我将使用您的示例。很抱歉搞混了。@stu-np。我以为这只是一个玩具的例子。这里的要点是,
apply
不会将列的名称传递给它应用的函数,因此您不能以这种方式使用它(但它似乎会传递属性-如果您尝试
apply(my.df,1,attributes)
my.df$c <- my.df$a + my.df$b
#  a b c
#1 1 4 5
#2 2 5 7
#3 3 6 9
colnames(my.df)
#[1] "a" "b"

apply( my.df , 1 , colnames )
#NULL