【发布时间】:2015-08-06 15:33:02
【问题描述】:
我很好奇如何将我编写的 for 循环转换为 R 中的函数?我没有在 R 中编写自己的函数的经验。我查看了 here 和 here 但这些似乎并没有提供太多帮助。我知道 for 循环不是必需的,总的来说,我正在尝试做类似于this blog post 的事情。
具有可重现数据的 for 循环在这里:
P <- c(1:50)
y <- length(P)
D <- as.data.frame(combs(P,2))
Z <- choose(y,2)
Num = NULL
Denom = NULL
Diff = NULL
for(n in 1:Z)
{
Num[n] = abs(D$V1[n]-D$V2[n])
Denom[n] = max(D$V1[n], D$V2[n])
Diff[n] = Num[n]/Denom[n]
}
PV=mean(Diff)
PV
但是,我有兴趣根据这些数据中的级别计算 PV:
DATA <- c(1:500)
NAME <- c("a", "b", "c", "d", "e")
mydf <- as.data.frame(cbind(DATA, NAME))
因此,我想使用的最终代码是:
ANSWER <- tapply(mydf$DATA, mydf$NAME, MY.FUNCTION)
所以,如果我可以将上面的 for 循环变成一个工作函数,我可以运行 tapply 函数来获取基于级别的 PV。
任何帮助或与我提供的建议相反的任何其他建议都将不胜感激。
谢谢!
【问题讨论】:
-
预期结果是什么?
-
预期的结果是使用tapply中的函数。我希望函数返回 PV
标签: r function loops apply levels