R:将向量转换为参数列表

R:将向量转换为参数列表,r,R,我想对向量应用一个函数。但是,函数需要一系列参数。因此,我需要将向量“拆分”为不相关的参数 假设我有一个名为dta的数据帧。我想运行一个函数,比如它的一列上的mean,比如DV 下面显示了问题 call("mean", dta$DV) 返回 mean(c(0.371, -0.860, etc... )) 列是向量这一事实与函数mean不兼容,函数mean需要一系列参数,而不是组合参数 如果“mean”被包含字符串的变量替换,则解决方案应该有效,例如 fun <- "mean" cal

我想对向量应用一个函数。但是,函数需要一系列参数。因此,我需要将向量“拆分”为不相关的参数

假设我有一个名为dta的数据帧。我想运行一个函数,比如它的一列上的mean,比如DV

下面显示了问题

call("mean", dta$DV)
返回

mean(c(0.371, -0.860, etc... ))
列是向量这一事实与函数mean不兼容,函数mean需要一系列参数,而不是组合参数

如果“mean”被包含字符串的变量替换,则解决方案应该有效,例如

fun <- "mean"

call( fun, dta$DV)

funR的函数并不完全一致。例如,
min
max
接受任意数量的参数,在数学计算中会考虑所有未识别的参数
mean
不是,它必须有所有数字作为第一个(或命名为
x=
)参数

min(1,20,0)
# [1] 0
最小值(c(1,20,0))
# [1] 0
平均值(1,20,0)#可能不是人们所期望的
# [1] 1
平均值(c(1,20,0))
# [1] 7
出于好奇,20和0没有被忽略,第一个
mean
调用被解释为
mean(0,trim=20,na.rm=0)
(其中
na.rm=0
实际上与
na.rm=FALSE
相同)

您使用
call
有点不合适。从帮助中

调用返回未计算的函数调用

这对你帮助不大。您可以执行
eval(call(…)
,但考虑到下一个函数,这似乎很愚蠢

使用
do.call
更直接一些。我可以将函数(匿名或命名)或与函数匹配的字符串作为其第一个参数。实际上,使用一个或另一个函数之间存在速度差异,因此我倾向于在可能的情况下使用
字符
引用函数名。(我不记得量化这个断言的引用,如果我很快找到它,我会将其包括在内。)

对于上面的
min
之类可以接受任意数量参数的函数,可以执行以下操作:


args好吧,我假设你指的是“一个函数”,而不是具体的
mean
,因为它实际上需要一个向量,而不是一系列参数。对于
mean
,我将使用
do.call(“mean”,list(dta$DV))
。但如果您有一个相反的函数(需要单例参数),则可以使用
do.call(“otherfunc”,as.list(dta$DV))
。这就是你的意思吗?好吧,所以我可能不理解这个问题。不过,为什么上面的调用不返回一个数字呢?如果您阅读,它会说“'call'返回一个未赋值的函数调用”,其中“unevaluated”是关键。您可以执行
eval(call(…)
(with does返回平均值),但您也可以执行
do.call(…)
,就像我前面的评论一样。@r2evans:如果您将您的评论放入答案中,我会验证它。谢谢你的反馈。