0

我正在编写一个函数并且遇到了一些问题。我的函数没有创建新变量,运行后没有错误,也没有变化,就好像我从未运行过它一样。函数之前的代码工作得很好,如果我直接通过代码传递参数(绕过代码的函数方面),它运行完美。

你觉得我有什么遗漏吗?我已经看了两天了,已经没有想法可以尝试了。任何建议将不胜感激!

path <- "C:/Documents/Data"
readFile <- paste(path,"/opps.csv",sep="")
oppsQty <- read.csv(file=readFile,sep=",")

oppsQty$Line.Created.date <- as.Date(as.character(oppsQty$Line.Created),
                                     "%m/%d/%Y")

opQty002.0084.01 <- oppsQty[oppsQty$Part=="002-0084-01",]

 productNumberData <- function(nameNum,prodNum){
    # CREATING YEAR VARIABLE #
    year2009 <- ifelse((nameNum$Line.Created.date <= 
                        as.Date("12/30/2009","%m/%d/%Y")),"2009","0")
    year2010 <- ifelse((nameNum$Line.Created.date > 
                        as.Date("12/30/2009","%m/%d/%Y")&
                        nameNum$Line.Created.date <= 
                        as.Date("12/30/2010","%m/%d/%Y")),"2010",year2009)
    year2011 <- ifelse((nameNum$Line.Created.date > 
                        as.Date("12/30/2010","%m/%d/%Y")&
                        nameNum$Line.Created.date <= 
                        as.Date("12/30/2011","%m/%d/%Y")),"2011",year2010)
    nameNum$line.YEAR <- ifelse((nameNum$Line.Created.date > 
                                as.Date("12/30/2011","%m/%d/%Y")&
                                nameNum$Line.Created.date <= 
                                as.Date("12/30/2012","%m/%d/%Y")),"2012",year2011)
 }
 productNumberData(opQty002.0084.01,"002-0084-01")
 #opQty002.0084.01$line.YEAR does not exist
4

1 回答 1

1

您在这里看到的是所谓的范围界定的结果。在任何体面的编程语言(包括 R)中,变量在全局范围内都无效。相反,变量存在于某个范围内。您正在创建的变量是函数范围的一部分。因此,在您尝试使用它的函数之外找不到它,这会导致错误。R 中的范围规则确实允许引用函数外部的变量,其中仅当函数范围内没有具有该名称的变量时才使用函数外部的变量。

作用域减少了较大 R 脚本中代码片段之间的依赖关系。通过这种方式,函数中的代码不太可能在其他函数中引起不希望的副作用。

我将使用的解决方案是将您创建的所有对象放在一个更大的数据结构中,可能是一个list. 代码看起来像:

spam = function(object_in) {
  A = f(object_in)
  B = g(object_in)
  list(A, B)
 }
result = spam(obj)
result[["A"]]
于 2012-06-21T21:02:15.417 回答