na.rm=TRUE(带和不带if语句)的问题

na.rm=TRUE(带和不带if语句)的问题,r,na.rm,R,Na.rm,我在让na.rm按照我的意愿行事方面遇到了问题。我正在练习编写函数,目前正在为mean编写函数。 我的测试向量是t您忘记在第二个函数中为na.rm指定默认值。一个好的做法应该是添加默认值(例如TRUE)。此外,请注意,您的逻辑应该是=,而不是=(在括号中),并且na.ommit应该应用于x,并返回: my.mean <- function(x, na.rm = TRUE) { stopifnot(is.numeric(x)) if (na.rm==TRUE) {x <

我在让na.rm按照我的意愿行事方面遇到了问题。我正在练习编写函数,目前正在为mean编写函数。
我的测试向量是
t您忘记在第二个函数中为
na.rm
指定默认值。一个好的做法应该是添加默认值(例如
TRUE
)。此外,请注意,您的逻辑应该是
=
,而不是
=
(在括号中),并且
na.ommit
应该应用于
x
,并返回:

my.mean <- function(x, na.rm = TRUE) {
    stopifnot(is.numeric(x))
    if (na.rm==TRUE) {x <- na.omit(x)}
    answer <- sum(x)/length(x)
    return(answer)
}
注意,在这种情况下,使用
na.rm=FALSE
应该返回
na
,因为
sum(t)=na

my.mean(t)
#[1] NA
my.mean(t, na.rm = TRUE)
#[1] 9
my.mean(t, na.rm = FALSE)
#[1] NA

您得到的错误只是声明您定义了一个参数(na.rm),而没有给它一个默认设置。在这种情况下,如果在调用中没有显式地给参数设置,函数将失败

要为您的论点设置默认值,请执行以下操作:

my.mean<-function(x, na.rm=FALSE) ...

my.mean您的第二个函数根本无效,更不用说能够给出错误的答案了。如果
if()
,则缺少括号,请不要为需要像
na.omit()
那样调用的
na.omit()
添加任何值。omit(x)
,并在需要双
=
时使用
=
测试相等性
na.rm=TRUE
。请再次检查您正在使用的功能。我希望函数的默认值为
na.rm=FALSE
,因此我没有这样做,而是在您编写的第一个函数中使用了
TRUE
。我忘了把
==
放在
if
语句中!我成功了谢谢你!
my.mean <- function(x, na.rm = TRUE) {
    stopifnot(is.numeric(x))
    if (na.rm==TRUE) {x <- na.omit(x)}
    answer <- sum(x)/length(x)
    return(answer)
}
my.mean <- function(x, na.rm) {
    stopifnot(is.numeric(x))
    if(!missing(na.rm) && na.rm == TRUE) {
        x <- na.omit(x)
    }
    answer <- sum(x)/length(x)
    return(answer)
}
my.mean(t)
#[1] NA
my.mean(t, na.rm = TRUE)
#[1] 9
my.mean(t, na.rm = FALSE)
#[1] NA
my.mean<-function(x, na.rm=FALSE) ...