如何在使用ddply时将多个参数传递给现有函数?

时间:2015-03-13 21:27:19

标签: r plyr

我看到很多类似的问题,但没有任何暗示如何解决我的具体问题。我有一个数据框(很好地融化),包括两个因子列和两个列,我想用它来提供一个有两个参数的函数。我基本上想做ddply所做的事情,因为它会为两个因子组合中的每一个提供函数的两个参数。就我而言,函数的第二个参数" ros" (package" CensReg")属于"逻辑",因此我创建了一组虚拟或错误的标签以与数字数据一起使用。

df <- data.frame(f1=c(rep("A",5), rep("B",5), rep("C",5)), f2=c(rep("Yes",10), rep("No",5)), d1=c(2,2,2,rnorm(12,9)), d2=(c(rep("TRUE",3),rep("FALSE",12))=="TRUE"))

我试图做这样的事情:

ddply(.data = df, .variables = .(f1, f2), function(x,y) ros(d1, d2))

我对ddply的遗漏是什么阻止这种情况发生?我收到了错误&#34;错误:对象&#39; d1&#39;找不到&#34;。 ros函数的输出类列出如下:

class(ros(x,y))
[1] "ros" "lm" 

如果这弄乱了ddply,我可以看到从函数中提取我需要的内容,类似于从线性回归中提取系数:

ddply(.data = df, .variables = .(f1, f2), function(x,y) mean = mean(ros(d1, d2)))

(只要相信我你可以调用mean(ros(.....))并返回一个值;基本上它会对已经删除&#34;&#34;的数据集进行强大的回归。数据点(低于测试检测限),并允许您计算可以使用&#34;表示&#34;,&#34;中位数&#34;等手动调用的摘要统计数据。)

任何有关如何将d1和d2参数传递给ddply中的函数的指导都可以继续,非常感谢!

1 个答案:

答案 0 :(得分:1)

使用summarizetransform而不使用嵌套函数:

ddply(.data = df, .variables = .(f1, f2),summarize,ros(d1,d2))

或者如果您想使用嵌套函数,您应该使用包含分组元素的单个参数(data.frame)创建一个:

ddply(.data = df, .variables = .(f1, f2),function(x)ros(x$d1,x$d2))

要揭开神秘面纱的一个暗示是使用browser来检查araguments:

ddply(.data = df, .variables = .(f1, f2),function(x)browser())

现在,如果你检查x,你可以验证它是data.frame:

Browse[1]> x

#    f1  f2       d1    d2
# 1  A Yes 2.000000  TRUE
# 2  A Yes 2.000000  TRUE
# 3  A Yes 2.000000  TRUE
# 4  A Yes 7.448215 FALSE
# 5  A Yes 8.599762 FALSE