0

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

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

如何更正我的功能?

4

1 回答 1

0

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

首先,通过在函数中将模型放在单引号中,您将向函数传递字符串“模型”,而不是语句模型(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)
}
于 2014-08-31T03:04:34.277 回答