如何在创建自己的函数时处理NA

elJ*_*rge 3 r apply dataframe na

我想知道在R中创建自己的函数时如何处理NA值.

我的代码如下:

# The function is simple:

function.BHR <-function(x) prod(1+x)-1

# The structure of the data.frame:    
dat <- t(data.frame(
  "A"=c(20:29/100),
  "B"=c(35:44/100),
  "C"=c(20:29/100),
  "E"=c(50:57/100,NA,NA),
  "E"=c(45:51/100,NA,NA,NA))

apply(dat,2,function.BHR)
Run Code Online (Sandbox Code Playgroud)

简单的apply函数为最后三列提供了NA.取而代之的是
它应该应用所有非NA值的函数.因此:

  for column 8: 
  function.BHR(c(0.27,0.42,0.27,0.57))
[1] 2.595799

for column 9: 
  function.BHR(c(0.28,0.43,0.28))
[1] 1.342912

for column 10: 
  function.BHR(c(0.29,0.44,0.29))
[1] 1.396304
Run Code Online (Sandbox Code Playgroud)

提前致谢!

乔治·

sgi*_*ibb 7

你可以简单地使用na.rm参数prod.详情?prod请见:

function.BHR <-function(x) { prod(1+x, na.rm=TRUE)-1 }

apply(dat, 2, function.BHR)

# [1] 3.228200 3.389747 3.556183 3.727619 3.904166 4.085938 4.273048 2.595799 1.342912 1.396304
Run Code Online (Sandbox Code Playgroud)


Pau*_*tra 5

更改您的功能以删除NA:

function.BHR <-function(x) {
   x = x[!is.na(x)]
   (prod((1+x))-1)
}

> apply(dat,2,function.BHR)
 [1] 3.228200 3.389747 3.556183 3.727619 3.904166 4.085938 4.273048 2.595799
 [9] 1.342912 1.396304
Run Code Online (Sandbox Code Playgroud)

is.na返回一个逻辑矢量说明哪值NA,则!(NOT)算子反转此逻辑载体,即TRUE对于一个有效的值,FALSENA.使用此向量进行索引仅返回有效值.