【问题标题】:Function defining answer by a vector通过向量定义答案的函数
【发布时间】:2011-10-21 21:10:56
【问题描述】:

希望学习函数编写。我有以下数据(例如):

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 A    Genus B
  2.345      3.456

【问题讨论】:

  • 啊抱歉,没意识到这个功能
  • 随机变量的方差不是范围的平方根。
  • 补充一下 Jack M. 所说的:您需要学习更多数学知识,并花时间阅读任何优秀的在线“R 简介和教程”页面。如果你真的没有停下来认为 R 会有一个 Variance 和 Std_deviation 函数,那么你有点错过了重点。
  • 我使用这个定义作为方差,基于我正在使用的领域发表的一篇论文。使用 var() 只会被替换,目前并没有真正担心这一点,也不是问题。我有几本我一直在阅读的 R 书籍,显然我无法提出一个可行的解决方案。如果您愿意忽略这些事实并帮助我学习这个程序,我们将不胜感激
  • @NickCrouch - 随机变量X 的方差为E((X-E(X))^2)(其中E(X) 表示X 的预期值)。 sqrt(max(X)-min(X))X 的方差相同。

标签: r function


【解决方案1】:

我将为您的函数起一个新名称,因为将其称为“方差”是错误的。我希望你能忽略这一点。我们可以处理数据框对象

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

【讨论】:

  • 非常感谢,很好的解决方案
猜你喜欢
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
  • 2019-05-17
  • 2019-12-29
  • 1970-01-01
相关资源
最近更新 更多