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