【问题标题】:for loop in R using if & print [closed]使用 if & print 在 R 中进行 for 循环 [关闭]
【发布时间】:2014-06-16 20:59:33
【问题描述】:

也许我在这方面想得太多了,但我需要创建一个 for 循环和 if 语句来找到我的数据集中的最高值。我们还必须编写一个打印语句,将其打印出来以及当天。初始矩阵中有 93 行和 4 列。第 4 列包含所需的数据。日期在第 1 列中。

我根本不懂编程。到目前为止,这是我得到的:

我用数据从列中创建了一个向量:

only.data <- c(data[,4])

这是我对 forif 声明的微弱尝试:

for (counter in 1:93) {
  if (only.data >= data[,4])
    print (only.data)
}

如何使用这种方法让它吐出最高值?它打印最大值 93 次,这不是我想要的。我需要创建only.data 向量还是可以使用原始矩阵?我还需要在最大值旁边打印出对应的日期。

ps - 我知道我可以使用更快的 max 函数,但这不是任务。

【问题讨论】:

    标签: r loops if-statement for-loop


    【解决方案1】:

    看来你在作弊,所以我不会在这里发布完整的解决方案,而只是指出你正确的方向

    1. data[,4] 已经是一个向量,没有任何理由在其上使用 c()。也没有理由将其保存在新对象 only.data 中,尽管它可能会使您的循环更快,因为它不需要在每个循环中建立索引。
    2. 循环的想法是您将在其中使用索引(尽管您不必这样做,但没有真正的理由不这样做)。因此,您在for() 中指定索引。尽管您指定了一个索引 (counter),但您还没有使用它,因此无论您在做什么,您的循环都会打印 only.data
    3. 您所有的if 所做的只是在每次迭代中检查only.data &gt;= only.data(这显然是不必要的)
    4. 在循环中计算最大值并不是一件显而易见的事情,因为您在每次迭代中比较单个值,因此您需要一些策略。例如,您可以创建一个虚拟变量,该变量将在每次迭代中与 only.data[counter] 进行比较,以检查它是否更大,如果不是则替换

    为了说明我的最后一点,考虑一个玩具示例

    set.seed(1)
    only.data <- sample(10,10)
    only.data
    #[1]  3  4  5  7  2  8  9  6 10  1 
    

    你可以看到最大值在第 9 位,现在我们将把这个向量的第一个值赋给一个虚拟变量,并尝试使用 for 循环来找到最大值

    dummy <- only.data[1]
    dummy
    ## [1] 3
    
    for (counter in only.data) {
      if (counter > dummy) dummy <- counter
    }
    
    dummy
    ## [1] 10
    

    【讨论】:

    • 这帮助很大。非常感谢!
    • @user3746369 如果答案对您有用,如果您接受答案,我们将不胜感激。这将为未来的读者提供有关解决方案价值的线索。另请参阅此帮助页面:What should I do when someone answers my question?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2017-06-02
    • 1970-01-01
    相关资源
    最近更新 更多