我看到很多类似的问题,但没有任何暗示如何解决我的具体问题。我有一个数据框(很好地融化),包括两个因子列和两个列,我想用它来提供一个有两个参数的函数。我基本上想做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中的函数的指导都可以继续,非常感谢!
答案 0 :(得分:1)
使用summarize
或transform
而不使用嵌套函数:
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