【问题标题】:Basic for() loop in RR中的基本for()循环
【发布时间】:2015-11-05 01:36:38
【问题描述】:

我通常是循环和 R 的新手。使用“iris”数据集,我需要使用 for() 循环并创建一个名为“X.IQR”的对象,其中包含“iris”前四列中每一列的四分位数范围。有人可以在这里为我提供一些见解吗?谢谢!

编辑:抱歉忘记包括我的尝试

for(row in 1:150){
for(column in 1:4){
print(paste("row =",row,"; col =",column))
print(iris[1:150,1:4])
}
}

我在这里尝试过这段代码,部分是我的知识,部分是我在课堂上学到的示例代码。我知道这是一个循环,我认为我已经指定了前 4 列,我只是不确定如何在此处合并 IQR,有人有什么建议吗?

【问题讨论】:

  • 请分享您的尝试。
  • 我的见解是不使用for() 循环。而是阅读help(IQR),然后阅读help(sapply)
  • 根据@RichardScriven 的评论,类似于下面发布的解决方案可能是X.IQR <- sapply(seq(4), function(x) IQR(iris[,x]))

标签: r for-loop


【解决方案1】:

如果您打算拥有所有行,则在选择数据子集时,您可以省略行选择:

iris[1:150,1:4]

变成

iris[ ,1:4]

正如 Richard 在评论中提到的,您可以使用 sapply:

X.IQR = sapply(X = iris[,1:4], FUN = IQR)

sapply 会将FUN(函数)IQR 应用于 iris 数据集的每个元素,对应于其列。

或使用应用:

X.IQR = apply(X = iris[ ,1:4], 2, FUN = IQR)

apply 可以做同样的事情,但它的代码有点多,而且不会总是那么干净。

阅读更多精彩回复:R Grouping functions: sapply vs. lapply vs. apply. vs. tapply vs. by vs. aggregate

【讨论】:

  • “不会总是那么干净”是什么意思?
  • 如果它在 data.frame 上操作,它将强制转换为矩阵。
  • 矩阵也不脏。
  • 我了解如何使用 apply 函数,但我特别想知道如何使用 for 循环来获得经验。
猜你喜欢
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
相关资源
最近更新 更多