【问题标题】:factor range as function variable in R因子范围作为R中的函数变量
【发布时间】:2014-08-06 06:48:15
【问题描述】:

我有代码

ggplot(bywells[bywells$Well_N == "KRT3",], aes(x = Date_m)) +
geom_line(aes(y = QOM, colour = "Oil, m3/month"))

其中绘制图表。此代码可以正常工作,没有任何错误。现在我想在bywells是变量data"KRT3"是变量wellname的函数中详细说明,但是如果我这样写

simple_fun <- function(data, wellname, ...)
{
   require("ggplot2", quietly=TRUE)
   ggplot(data[data$Well_N == "wellname",], aes(x = Date_m)) +
   geom_line(aes(y = QOM, colour = "Oil, m3/month"))
}

执行函数后我收到错误消息

Error: Aesthetics must either be length one, or the same length as the dataProblems:QOM, Date_m

当我尝试时

ggplot(data[wellname == Well_N %in% data,], aes(x = Date_m))

我明白了

Error in match(x, table, nomatch = 0L) : object 'Well_N' not found

任何提示如何正确地将其定义为变量?

例如可重复性,我添加了一小块数据样本:

"Well_N";"Date_m";"QOM";"QWM";"QOMT";"BHP";"PRES";"QIW";"THPI";"QFM";"WCT"
"KRT3";2014-06-30;132;525;108;NA;NA;NA;NA;657;79
"KRT3";2014-07-30;36;120;29;NA;NA;NA;NA;156;76
"KRT3";2014-08-30;39;2.6;32.1;NA;NA;NA;NA;41.6;6.25
"KRT3";2014-09-30;211.274;749.362;174.070;NA;NA;NA;NA;960.636;78
"KRT3";2014-10-30;45;45;37.07;NA;NA;NA;NA;90;50
"KRT4";2014-08-30;108.37;1815.358;90.79;NA;NA;NA;NA;1923.73;94
"KRT4";2014-09-30;161.775;202.87;133;NA;NA;NA;NA;364;55
"KRT4";2014-10-30;30;1680;24;NA;NA;NA;NA;1710;98
"KRT4";2014-11-30;31.8;339;26;NA;NA;NA;NA;370.8;91

Well_N 的类型为factorDate_mPOSIXct,其他为num

【问题讨论】:

  • 请提供一个可重现的例子。
  • wellname 参数有什么意义,如果你不使用它?
  • @RomanLuštrik,也许我在某个地方迷路了——我不是程序员。我只是想实现这个函数可以被称为 simple_fun(mydataframe, AnyWellName)。在我的数据中,我有 93 个水平的因子 Well_N。
  • 这里有一些关于如何使您的问题可重现的提示。 stackoverflow.com/questions/5963269/…这个函数是怎么运行的?
  • 阅读我之前发布的主题。关于如何向我们提供数据有很多提示。考虑到我们是懒惰的人。

标签: r function variables


【解决方案1】:

这是可重复的数据(我只留下了三列需要的,在你以后的问题中使用函数dput):

bywells <-
structure(list(Well_N = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L), .Label = c("KRT3", "KRT4"), class = "factor"), Date_m = structure(c(16251, 
16281, 16312, 16343, 16373, 16312, 16343, 16373, 16404), class = "Date"), 
    QOM = c(132, 36, 39, 211.274, 45, 108.37, 161.775, 30, 31.8
    )), class = "data.frame", row.names = c(NA, -9L), .Names = c("Well_N", 
"Date_m", "QOM"))

这是没有函数的调用:

library(dplyr)
library(ggplot2)
library(magrittr)
qplot(x=Date_m, y=QOM, data = bywells %>% filter(Well_N == "KRT3"), geom="line")

函数如下:

pfun <- function(data,wellname) {
    qplot(x=Date_m, y=QOM, data=data %>% filter(Well_N == wellname), geom="line")
}

对应的调用:

pfun(bywells,"KRT3")

您的错误是将变量wellname 的引号放在过滤数据的条件中。此外,您的颜色设置也不正确,因为没有称为“油,立方米/月”的颜色。瞄准英文单词,如“red”、“blue”,更多变体请参见colors()。颜色应该在 aes 参数之外设置,以便它工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多