gpt4 book ai didi

r - 使用 if 语句的函数仅返回一个 else 条件,而不管值如何

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

我有以下 R 函数,它检查一系列值并写出有关它们的句子。问题是当我使用该函数然后调用它时,无论值如何,所有句子都是相同的。

hover <- function (){
if(df$Value > 140 && df$Change < -0.05){
hovertext ="Price High, Level of Activity Low"
}else{
if(df$Value < 140 && df$Change > 90 && df$YVoltage > -0.05 &&
df$YVoltage < 0.30 ){
hovertext ="Price Normal, Level of Activity normal"
} else {
hovertext ="Price High, Level of Activity high"
}
}
}
hovertext <- hover ()
hovertext

关于如何解决此问题的任何想法。

这里是示例数据:

TimeStamp,Price,Change
12:00:00,140,0.05
12:12:03,148,0.06
12:12:40,130,-0.05
12:12:50,135,0.01
12:13:00,135,0
12:13:10,1.37,0.01

这是我目前拥有的:

library (ggplot2)
df <- read.csv(file.choose(), header =TRUE)
df
df$Price <- as.numeric(as.character(df$Price))
df$Change <- as.numeric(as.character(df$Change))
df$TimeStamp <- strptime(as.character(df$TimeStamp), "%H:%M:%OS")
sapply(df, class)
options("digits.secs"=3)
summary (df)
df$TimeStamp <- df[1,"TimeStamp"] +
cumsum(runif(1:length(df$TimeStamp))*60)
summary(df)
hover <- function (df){
out <- ifelse((df$Value > 140 & df$Change < -0.05),
"Price High, Level of Activity Low",
ifelse((df$Value < 140 & df$Change > 90 &&
df$YVoltage > -0.05 & df$Change < 0.30),
"Price Normal, Level of Activity normal",
"Price High, Level of Activity high"
))
return(out)
}
hovertext <- hover(df)
hovertext

sink (file="c:/Users/user/text.txt", type="output",split=FALSE)
cat(sprintf(" Time=\"%s\" value=\"%f\" hoverText =\" %s\" ></set>\n",
df$TimeStamp, df$Price, hovertext))
unlink("text.txt")

希望这有帮助。

最佳答案

这有很多问题:

1) 您正在使用一个不带参数的函数,并希望它对全局环境中的变量执行某些操作。那很危险。

2) 该函数没有返回任何内容。实际上是这样的:它返回最后一个赋值,但我确信您没有意识到这一点,因此无论如何您最好始终包含一个 return() 子句。

3) if() 子句未向量化,因此它仅使用第一个条件。在您的情况下,它仅测试 df 的第一行。

5) 如果您只想测试系列的第一个值,则使用 &&||。这里您需要的是 &| (参见 R 中的 ?"&")

5) 不要调用您的数据帧 df,df() 是一个函数。

要做我猜你想做的事,试试这个:

#Sample data for testing
Df <- data.frame(Value = rnorm(100,140,10),
Change = rnorm(100,90,90),
YVoltage = rnorm(100,0.10,0.30))

hover <- function (X){
out <- ifelse((X$Value > 140 & X$Change < -0.05),
"Price High, Level of Activity Low",
ifelse((X$Value < 140 & X$Change > 90 &
X$YVoltage > -0.05 & X$YVoltage < 0.30),
"Price Normal, Level of Activity normal",
"Price High, Level of Activity high"
))
return(out)
}

hovertext <- hover(Df)
hovertext

关于r - 使用 if 语句的函数仅返回一个 else 条件,而不管值如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3707010/

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