gpt4 book ai didi

r - 使用带条件的 lapply 遍历行

转载 作者:行者123 更新时间:2023-12-04 10:11:49 25 4
gpt4 key购买 nike

我是 R 的新手,具有更多过程语言的背景。目前,我正试图摆脱不必要的“for”循环,并使它们使用来自 apply 系列的东西。所以这是我的问题:

  • 假设我有一个矢量:data <- c(0.0008, 0.0007, 0.0040, 0.0081, 0.0217, 0.0292, 0.0332, 0.0451, 0.0533, 0.0621)
  • 而且我想将它转换成一个只增加数据点的向量。为了简单起见,假设我希望像第二个元素(小于前一个元素)这样的所有元素成为前一个元素和下一个元素的平均值
  • 为此,我尝试像这样使用 lapply:data <- lapply(data, function(i) ifelse(data[i+1]<data[i], data[i+1]<-(data[i]+data[i+2])/2, data[i+1]))
  • 结果是一个包含所有元素的列表(不是向量):logical(0)

我不知道我的错误在哪里 - 我在这里错过了什么?

最佳答案

lapply 用于迭代列表中的多个对象并返回一个列表。阅读 ?lapply。只需一个向量,您就不需要/不想要它。

这是一种非循环的方法:

w = which( c(FALSE, tail(data, -1) < head(data, -1) ) )
data[w] = (data[w-1] + data[w+1])/2

如果你有连续递减的元素,你的程序会给出奇怪的结果。以 data = c(2, 1, 0, 3) 为例,请注意结果仍然不是单调的。所以,我认为您可能不应该尝试以这种方式进行矢量化,而实际上应该使用循环。此外,您还需要考虑当最后一个元素丢失时要做什么,例如 c(2,3,0)

关于r - 使用带条件的 lapply 遍历行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36700705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com