我正在使用R并且已经四处寻找答案但是虽然我看到了类似的问题,但它对我的具体问题没有用.
在我的数据集中,我试图使用NA's作为占位符,因为一旦我完成了部分分析,我将返回它们,因此,我希望能够做我所有的计算,好像它们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"
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Error in if ((x) > test) { : missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)
你们知道,这是一个错误的功能.关于如何忽视这些NA的想法?我会尝试,na.omit如果我能把它插入NA以前的所有地方,但我不知道该怎么做.
sapply因为>已经过矢量化,所以不需要和你的匿名函数.
指定无效的默认参数值似乎也很奇怪.我的猜测是你使用它作为kludge而不是使用该missing功能.抛出错误而不是返回也是一种好习惯,NULL因为在函数返回时你仍然需要尝试捕获NULL.
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)
Run Code Online (Sandbox Code Playgroud)
这个说法很奇怪:
test1 <- sapply(L,function(x) if((x)> test){1} else {0})
Run Code Online (Sandbox Code Playgroud)
尝试:
test1 <- ifelse(is.na(L), NA, ifelse(L > test, 1, 0))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5958 次 |
| 最近记录: |