将一个向量的最大值保留到R中的另一个向量中
我想保留向量中的最大值。R代码写在下面。 如何修复此代码,使其运行时不会出现错误 dat位于数据帧中将一个向量的最大值保留到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
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。Asdat
是完全肯定的,此处将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