R 使用apply和多参数函数
我想在数据帧上应用一个函数。该函数将V1作为arg1,V2作为arg2,我想将结果写入V3或其他向量 有没有一种简单而紧凑的方法可以做到这一点?我在下面发布了一个(非工作)示例 谢谢 斯图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
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.otherfuncmapply()
就是为此而设计的
以下任一项都可以完成此工作。第二种方法的优点是,它可以很好地扩展到具有任意数量参数的函数
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