如何编写函数来提取特定数据?

时间:2014-07-17 17:16:07

标签: function extract square-bracket economics

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

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)

它不返回任何数据:<0 rows>(或0-length row.names

没有功能,它可以正常工作:

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

如何更正我的功能?

1 个答案:

答案 0 :(得分:0)

我在上面的函数中看到了两个问题。

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

其次,如果您明确引用字符串而不是R对象,则应该将函数传递给字符串。因此,模型('Frenchdoor')将起作用,但模型(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)
}

最后,提供与函数名称不同的参数名称是最佳实践。因为model是数据框中的名称,所以我建议重命名该函数。总之,像这样的东西会更清洁:

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