【问题标题】:How to write function to extract specific data?如何编写函数来提取特定数据?
【发布时间】:2014-07-17 17:16:07
【问题描述】:

我想编写一个函数来绘制所需模型冰箱的每日价格。 这是我的问题的一个小例子:

data <- read.table(header=TRUE,text='
date price model
    2012-01-01 100 Frenchdoor
    2012-01-01 150 Bottom
    2012-01-02 110 Frenchdoor
    2012-01-02 160 Bottom
    ')

这是我的迷你功能:

model <- function(model){
    data <- data[data$model=='model',]
    return(data)
}

但是当我尝试使用该功能时,

model(Frenchdoor)

它不返回任何数据:&lt;0 rows&gt;(或0-length row.names

没有功能,它工作正常:

data <- data[data$model=='Frenchdoor',]
data

如何更正我的功能?

【问题讨论】:

    标签: function extract square-bracket economics


    【解决方案1】:

    我在上面的函数中发现了两个问题。

    首先,通过在函数中将 model 放在单引号中,您将向函数传递字符串“model”,而不是语句 model(Frenchdoor) 中提供的参数值。

    其次,如果你显式引用一个字符串,而不是一个 R 对象,你应该给你的函数传递一个字符串。所以,model('Frenchdoor') 会工作,但 model(Frenchdoor) 不会。

    考虑以下修订:

    data <-read.table(header=TRUE, text='
    date price model
        2012-01-01 100 Frenchdoor
        2012-01-01 150 Bottom
        2012-01-02 110 Frenchdoor
        2012-01-02 160 Bottom
    ')
    
    model <- function(model){
    data <- data[data$model==model,]
    return(data)
    }
    

    最后,提供与函数名称不同的参数名称确实是最佳实践。因为模型是您数据框中的名称,所以我建议重命名该函数。综合起来,这样的东西会更干净一些:

    FilterByModel <- function(model){
    data <- data[data$model==model,]
    return(data)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多