gpt4 book ai didi

function - 忽略 sapply 函数中的 NA

转载 作者:行者123 更新时间:2023-12-02 19:45:08 27 4
gpt4 key购买 nike

我正在使用 R 并四处寻找答案,但虽然我看到过类似的问题,但它对我的具体问题不起作用。

在我的数据集中,我尝试使用 NA是作为占位符,因为一旦完成部分分析,我将返回它们,因此,我希望能够像 NA 一样进行所有计算。并不真的在那里。

这是我的示例数据表问题

ROCA = c(1,3,6,2,1,NA,2,NA,1,NA,4,NA)
ROCA <- data.frame (ROCA=ROCA) # converting it just because that is the format of my original data

#Now my function
exceedes <- function (L=NULL, R=NULL, na.rm = T)
{
if (is.null(L) | is.null(R)) {
print ("mycols: invalid L,R.")
return (NULL)
}
test <-(mean(L, na.rm=TRUE)-R*sd(L,na.rm=TRUE))
test1 <- sapply(L,function(x) if((x)> test){1} else {0})
return (test1)
}
L=ROCA[,1]
R=.5
ROCA$newcolumn <- exceedes(L,R)
names(ROCA)[names(ROCA)=="newcolumn"]="Exceedes1"

我收到错误:

Error in if ((x) > test) { : missing value where TRUE/FALSE needed 

正如你们所知,sapply 函数出了问题。关于如何忽略这些的任何想法NA的?我会尝试na.omit如果我能让它插入所有 NA就在他们之前的位置,但我不知道该怎么做。

最佳答案

不需要 sapply 和匿名函数,因为 > 已经矢量化。

指定无效的默认参数值似乎也很奇怪。我的猜测是,您将其用作拼凑,而不是使用 missing 函数。抛出错误而不是返回 NULL 也是一种很好的做法,因为当函数返回 NULL 时您仍然需要 try catch 。

exceedes <- function (L, R, na.rm=TRUE)
{
if(missing(L) || missing(R)) {
stop("L and R must be provided")
}
test <- mean(L,na.rm=TRUE)-R*sd(L,na.rm=TRUE)
as.numeric(L > test)
}

ROCA <- data.frame(ROCA=c(1,3,6,2,1,NA,2,NA,1,NA,4,NA))
ROCA$Exceeds1 <- exceedes(ROCA[,1],0.5)

关于function - 忽略 sapply 函数中的 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6499905/

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