期待学习函数写作。我的数据如下(例如):
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
}
但我不知道如何生成一个响应来给我一个输出,其结果取决于Genus。所以我希望生成如下输出:
Genus A Genus B
2.345 3.456
答案 0 :(得分:3)
我将为你的函数命名一个新名称,因为将它称为“variance”是错误的。我希望你能忽略这一点。我们可以处理数据框对象
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
}
现在使用它来处理整个数据帧,使用split-lapply策略,该策略将Genus值确定的原始数据帧的各部分传递给dev2函数
lapply( split(dfrm, list(dfrm$Genus)), FUN = dev2)
$A
[1] 1.079669
$B
[1] 1.772467