0

我正在尝试自动化一些图形,而不诉诸传统循环。我很难弄清楚如何将数据框行的元素作为函数的参数传递。该函数如下所示:

makeline  <- function(df, var, date, ylab="",xlab="", title="", nbershade=TRUE) {
p <- ggplot(df, aes_string(x=date, y=var)) 
p <- p  + geom_line()

# do some other magical things 
}

假设我有一个数据框,其中一行如下:

row1 <- c("corn","Price","Date")

由于玉米是一个数据框 ggplot 作为一个角色被它窒息。然后我使用不带引号的玉米,因为它是一个列名为“价格”和“日期”的数据框,我认为这会起作用:

mapply(makeline,row1[1],row1[2],row1[3])

无论如何,我正在摸索如何有效地使用这个新功能,而不会导致遍历列表。任何指针表示赞赏。

4

2 回答 2

1

我不确定我是否会推荐此策略,但您可以使用它get来获取 data.frame

makeline  <- function(df, var, date, ylab="",xlab="", title="", nbershade=TRUE) {
  df <- get(df)
  p <- ggplot(df, aes_string(x=date, y=var)) 
  p <- p  + geom_line()

# do some other magical things 
}

您可能需要调整环境get才能始终如一地工作,但它inherits = TRUE可以处理大多数事情

data(mtcars)
data(diamonds)

Map(makeline, df = c('mtcars','diamonds'), var = c('cyl','x'), date = c('mpg','y'))
于 2013-03-12T04:30:11.133 回答
0

试试这个

mapply(makeline,get(row1[,1]),row1[,2],row1[,3])
于 2013-03-12T04:29:14.223 回答