我正在尝试自动化一些图形,而不是诉诸传统的循环。我很难弄清楚如何传递一行数据帧的元素作为函数的参数。该函数如下所示:
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,它作为一个字符被扼杀。然后我使用没有引号的玉米,因为它是一个列名为“Price”和“Date”的数据框,我认为这样可行:
mapply(makeline,row1[1],row1[2],row1[3])
无论如何,我正在摸索试图有效地使用这个新功能而不会导致循环遍历列表。任何指针赞赏。
答案 0 :(得分: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'))
答案 1 :(得分:0)
试试这个
mapply(makeline,get(row1[,1]),row1[,2],row1[,3])