na.rm=TRUE(带和不带if语句)的问题
我在让na.rm按照我的意愿行事方面遇到了问题。我正在练习编写函数,目前正在为mean编写函数。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 <
我的测试向量是
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) ...