gpt4 book ai didi

r - 在for循环中存储具有多个条件的变量,直到在R中满足条件

转载 作者:行者123 更新时间:2023-12-04 11:14:44 27 4
gpt4 key购买 nike

(我知道 for 循环不是 R 中的首选,但这是我能想到的最好的选择)

我试图遍历一个向量并在满足条件后返回向量值。

一旦满足下一个条件,我想删除变量。

到目前为止,我已经了解了以下内容:

df = c(1:10)

sig = function (df) {

pos = integer(10)

for (i in 1:10) {

if (df[i] > 3 ) { # Once df[i] is bigger than 3 store the value of df[i]
pos[i] = df[i]
}
else if(df[i] < 7 ){ # Keep value of df[i] until next condition is met
pos[i] = pos[i - 1]
}
else{pos[i] = 0} # set the value back to 0
}

reclass(pos,df)
}

sig(df)

我收到以下错误 Error in pos[i] <- pos[i - 1] : replacement has length zero

答案应该如下所示:

df  sig
1 0
2 0
3 0
4 4
5 4
6 4
7 0
8 0
9 0
10 0

有什么想法吗?

最佳答案

实现输出的另一种方式:

pos = integer(10)
pos[df>3 & df<7]<-df[which.max(df>3 & df<7)]
cbind(df,pos)
df pos
[1,] 1 0
[2,] 2 0
[3,] 3 0
[4,] 4 4
[5,] 5 4
[6,] 6 4
[7,] 7 0
[8,] 8 0
[9,] 9 0
[10,] 10 0

关于您的问题

i 从 1 开始,在 for 循环中你有 pos[i-1],所以 pos[0] 但是列表从 1 开始。

试试这个:

sig = function (df) {

pos = integer(10)

for (i in 1:10) {

if (df[i] > 3 ) { # Once df[i] is bigger than 3 store the value of df[i]
pos[i] = df[i]
}
else if(df[i] < 7 ){ # Keep value of df[i] until next condition is met
if(i>1) {
pos[i] = pos[i - 1]
} else

{
pos[i]=0
}
}
else{pos[i] = 0} # set the value back to 0
}

return(cbind(df,pos))
}
添加了

return指令

你的输出:

sig(df)
df pos
[1,] 1 0
[2,] 2 0
[3,] 3 0
[4,] 4 4
[5,] 5 5
[6,] 6 6
[7,] 7 7
[8,] 8 8
[9,] 9 9
[10,] 10 10

输出与一方面不同,因此您必须在 for 循环内查找逻辑中的其他错误。

关于r - 在for循环中存储具有多个条件的变量,直到在R中满足条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49275801/

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