【问题标题】:R - set several factor levels as default argument in a functionR - 将几个因子级别设置为函数中的默认参数
【发布时间】:2017-06-22 14:11:42
【问题描述】:

我正在尝试创建一个从数据集中查找价格和汽车类型的函数。两者都有默认参数。对于价格,这很容易。但是对于汽车类型(我将其作为因素),我找不到将所有因素设置为默认值的方法。

目标是,如果您没有在 car_type 中设置任何内容,它将返回所有可能的汽车类型。

search <- function(start_price = 0, end_price = 1000, car_type = ???){
  subset_data <- auto[price <= end_price   &
                      price >  start_price &
                      vehicleType == car_type]
  return(subset_data)
}
search()

这样“search()”就会返回价格在 0 到 1000 之间的所有汽车以及所有可能的汽车类型。我试过使用向量和列表,但没有任何运气。

【问题讨论】:

  • 我认为您可以设置car_type = 'default',其中“默认”是您想要的汽车,带有单引号或双引号。此外,您需要在subset_data 赋值中使用逗号,否则它将尝试对列而不是行进行子集化。应该说subset_data &lt;- auto[(price &lt;= end_price &amp; price &gt; start_price &amp; vehicleType == car_type),]
  • 这个功能是否需要加载data.table包?
  • @NathanWerth 是的,我相信是的

标签: r function arguments default


【解决方案1】:

解决这个问题的常用方法是使用NULL 作为默认值并在函数中处理它。

search <- function(start_price = 0, end_price = 1000, car_type = NULL){
  if (is.null(car_type) {
    car_type <- levels(auto$vehicleType)
  }
  subset_data <- auto[price <= end_price   &
                      price >  start_price &
                      vehicleType %in% car_type]
  return(subset_data)
}

【讨论】:

  • 搜索特定车型会是什么样子?搜索(品牌 == '轿车')或类似的东西?
  • 如果我正确理解您的问题:search(car_type = "sedan")。如果autos 中有另一个名为brand 的列,那么您必须在创建函数时将其添加为参数。
猜你喜欢
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多