2011-10-21 112 views
1

期待学习函数写作。我有在下面的(例如)布置数据:用矢量定义答案的函数

Genus Species Wing Tail 
A  X  10.5 20.3 
A  Y  10.7 20.7 
B  XX 15.2 22.5 
B  XY 15.5 24 

我计算方差用于使用方程给定的性状:

sqrt(max(Wing) - min (Wing)) 

其中我总结所有特征。

所以,我可以写下面的功能,所以总的数据集和方差:

variance<- function(data){ 
t <- sqrt(max(Tail)-min(Tail)) 
w <- sqrt(max(Wing)-min(Wing)) 
x <- sum(t,w) 
x 
} 

但我can'twork如何生成给我输出的响应,其中这样的结果是依赖于属。所以我期待产生一个输出,如:

Genus A Genus B 
    2.345  3.456 
+0

啊抱歉,没有意识到该功能 –

+0

而随机变量的方差不是范围的平方根。 – 2011-10-21 21:15:52

+1

为了增加Jack M.所说的话:你需要学习更多的数学知识,并花时间阅读任何优秀的在线“R介绍和教程”页面。如果你真的没有停下来认为R将会有一个Variance和Std_deviation函数,那么你有点失去了整个观点。 –

回答

3

我将给你的函数一个新的名字,因为把它称为“方差”是错误的。我希望你能忽略这一点。我们可以将数据帧对象

dput(dfrm) 
structure(list(Genus = structure(c(1L, 1L, 2L, 2L), .Label = c("A", 
"B"), class = "factor"), Species = structure(c(1L, 4L, 2L, 3L 
), .Label = c("X", "XX", "XY", "Y"), class = "factor"), Wing = c(10.5, 
10.7, 15.2, 15.5), Tail = c(20.3, 20.7, 22.5, 24)), .Names = c("Genus", 
"Species", "Wing", "Tail"), class = "data.frame", row.names = c(NA, 
-4L)) 

dev2<- function(df){ 
    t <- sqrt(max(df[["Tail"]])-min(df[["Tail"]])) 
    w <- sqrt(max(df[["Wing"]])-min(df[["Wing"]])) 
    x <- sum(t,w) 
    x 
    } 

现在用它来对全部数据框上工作的工作,使用分lapply战略,经过属值到DEV2函数确定原始数据帧的部分

lapply(split(dfrm, list(dfrm$Genus)), FUN = dev2) 
$A 
[1] 1.079669 

$B 
[1] 1.772467 
+0

非常感谢,很好的解决方案 –