将一个向量的最大值保留到R中的另一个向量中

将一个向量的最大值保留到R中的另一个向量中,r,R,我想保留向量中的最大值。R代码写在下面。 如何修复此代码,使其运行时不会出现错误 dat位于数据帧中 dat=c(3, 5, 4, 2, 8, NA, NA, 9, 10, 3) 期望输出为 MaxRuns=c(3,5,5,8,8,8,9,10,10) maxValue=函数(dat){ maxv=0 对于(1:10中的i)最大运行次数(i)=0 因为(我在1:10){ 如果dat(i)>maxv{ maxv=dat(i)} MaxRuns(i)=maxv } 返回(最大值) } maxVal

我想保留向量中的最大值。R代码写在下面。 如何修复此代码,使其运行时不会出现错误

dat位于数据帧中

dat=c(3, 5, 4, 2, 8, NA, NA, 9, 10, 3)
期望输出为 MaxRuns=c(3,5,5,8,8,8,9,10,10)

maxValue=函数(dat){
maxv=0
对于(1:10中的i)最大运行次数(i)=0
因为(我在1:10){
如果dat(i)>maxv{
maxv=dat(i)}
MaxRuns(i)=maxv
}
返回(最大值)
}
maxValue maxValue=函数(dat){
+maxv=0
+对于(1:10中的i)最大运行次数(i)=0
+因为(我在1:10){
+如果dat(i)>maxv{
错误:中出现意外符号:
“为了(我在1:10){
如果dat“
>maxv=dat(i)}
错误:“maxv=dat(i)}”中出现意外“}”
>MaxRuns(i)=maxv
错误:找不到对象“maxv”
>      }
错误:“}”中出现意外“}”
>返回(最大值)
错误:找不到对象“maxv”
>     }
错误:“}”中出现意外“}”
>最大值最大值
错误:找不到对象“maxValue”

多谢各位。MM

这看起来像
cummax
,但您需要处理
NA
s。As
dat
是完全肯定的,此处将
NA
s替换为0

cummax(replace(dat, is.na(dat), 0))
#[1]  3  5  5  5  8  8  8  9 10 10
正如@Dason所提到的,将
NA
值替换为
min
将使其具有通用性

cummax(replace(dat, is.na(dat), min(dat, na.rm = TRUE)))

可以使用方括号(
[]
)而不是圆括号(
()
)访问向量的每个元素。我会写一个类似这样的循环

maxv = integer(length = length(dat))
current_max = 0

for (i in seq_along(dat)) {
  if (dat[i] > current_max & !is.na(dat[i])){
     current_max <- dat[i]
  }
  maxv[i] <- current_max
}

maxv
#[1]  3  5  5  5  8  8  8  9 10 10
maxv=integer(长度=长度(dat))
当前_max=0
对于(沿(dat)顺序排列的i){
如果(dat[i]>current_max&!is.na(dat[i])){

当前_max有一些问题需要解决

您可以使用is.NA检查条目是否为NA。此外,当您访问dat条目时,请使用dat[i]而不是dat(i)。此外,请尽量不要将变量命名为与函数名相同的名称

dat=c(3, 5, 4, 2, 8, NA, NA, 9, 10, 3)
maxValue=function(dat){
    maxv=0
    MaxRuns = rep(0, 10)
    for (i in 1:10){
        if (!is.na(dat[i]) && dat[i] > maxv){
            maxv=dat[i] }
    MaxRuns[i]=maxv
     }
    return(MaxRuns)
}
maxRuns<-maxValue(dat)
print(maxRuns)

替换为向量的最小值将使其保持更多general@Dason是的,正确。我已经相应地更新了答案。谢谢。有趣的是,我需要使用rep函数,而不是for的两个实例(1:10中的I)。我的语法有问题吗?否则,我肯定会保留这个。谢谢。MMI之前没有定义MaxRuns,因此我在那里定义它。
maxv = integer(length = length(dat))
current_max = 0

for (i in seq_along(dat)) {
  if (dat[i] > current_max & !is.na(dat[i])){
     current_max <- dat[i]
  }
  maxv[i] <- current_max
}

maxv
#[1]  3  5  5  5  8  8  8  9 10 10
dat=c(3, 5, 4, 2, 8, NA, NA, 9, 10, 3)
maxValue=function(dat){
    maxv=0
    MaxRuns = rep(0, 10)
    for (i in 1:10){
        if (!is.na(dat[i]) && dat[i] > maxv){
            maxv=dat[i] }
    MaxRuns[i]=maxv
     }
    return(MaxRuns)
}
maxRuns<-maxValue(dat)
print(maxRuns)
[1]  3  5  5  5  8  8  8  9 10 10