【问题标题】:Continuous Error in argument "x" is missing, with no default参数“x”中的连续错误丢失,没有默认值
【发布时间】:2018-05-09 09:44:58
【问题描述】:

我正在尝试构建一个函数,该函数采用作业分数的数字向量(长度为 n)和可选的逻辑参数 drop 来计算单个作业值。如果 drop = TRUE,则必须丢弃最低的硬件分数。

step1 函数获取平均值

    get_average <- function(x,na.rm=TRUE) { 
   if(na.rm==TRUE){
         x = remove_missing(x)}
       total <- 0
       for (n in 1:length(x)) {
total= total  + x[n]

    }
   return(total/length(x))
  } 

把它们放在一起

    score_homework <- function(x,drop=TRUE)  
     {
     if(drop==TRUE)
       x = drop_lowest(x)
    {get_average(x)}}

但是我不断收到错误 score_homework() 中的错误:缺少参数“x”,没有默认值

【问题讨论】:

  • 所以?你究竟是如何调用 score_homework 函数的?

标签: r function if-statement missing-data


【解决方案1】:

我不确定这是否是您想要的,但可以。

首先生成一些虚拟数据:


# Set seed
set.seed(1234)

# Generate dummy homework data with <NA> values
homework <- c(rep(NA, 20), rnorm(n = 100, mean = 50, sd = 10))

# Have a quick look
hist(homework)

然后我们编写函数:


# Make function
homework_func <- function(data, drop = TRUE) {
    # Remove NA
    data <- data[!is.na(data)]

    # Calculate the average depending on whether 'drop' is T or F
    if(drop == TRUE) {
        data <- data[data > min(data)]
        mean(data)
    } else {
        mean(data)
    }
} 

# Use function with 'drop = TRUE'
homework_func(data = homework, drop = TRUE)
#> [1] 48.65349

# Use function with 'drop = FALSE'
homework_func(data = homework, drop = FALSE)
#> [1] 48.43238

【讨论】:

    【解决方案2】:

    这是一个消除最低缺失分数的函数,它比原始帖子中的版本简单。我按降序对分数进行排序,以防最低分数出现平局。在这种情况下,我们应该只删除最低分数的一个实例。此外,使用 R 的 mean() 函数比编写自己的函数要好得多。

    scores <- c(78,93,61,NA,61,83,92,95,NA,100)
    
    removeMinScore <- function(x) {
         x <- x[order(-x)] # order descending
         x <- x[!is.na(x)] # remove NAs
         x[1:length(x)-1] # return all but lowest score, removes only 1 tied value
    }
    

    也就是说,如果您必须编写自己的 mean() 版本,这里有一个利用现有 R 函数的更简单的方法。

    提示:由于is.na() 返回一个包含TRUEFALSE 值的向量,您可以将它们相加以计算向量中非缺失值的数量。

    mymean <- function(x) {sum(x, na.rm=TRUE) / sum(!is.na(x))}
    

    结果如下所示。

    score_homework() 的修改版本是:

    score_homework <- function(x,drop=TRUE){
        if(drop == TRUE) return mean(removeMinScore(x),na.rm=TRUE)
        else mean(x,na.rm=TRUE)
    }
    

    功能测试结果如下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 2017-12-09
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 2022-08-07
      • 2018-09-10
      相关资源
      最近更新 更多