将参数传递给R中的函数和变量作用域

时间:2015-03-24 21:05:55

标签: r function scope default-arguments

我正在编写一个带有两个参数(状态,结果)的简单函数。状态用于稍后对数据帧进行子集化。

话虽如此,部分要求是状态是长度为2的字符向量。我需要编写更多代码以确保传递的状态符合此要求。

所以我写了以下内容:

best <- function(state, outcome) {

  outcome <- read.csv("outcome-of-care-measures.csv", colClasses = "character")
  state <- vector(mode = "character", length = 2)
  st.checkTbl <- outcome[8]

  state
  }

然而,当我调用函数并传递参数时:

best("AXA") or best("FOO") or even best("TX") or best(AL)

我得到的全部是:&#34;&#34; &#34;&#34;

如果我注释掉#state&lt; - ...那么它会正确传递参数并打印出#34; FOO&#34;或&#34; AXA&#34;或&#34; TX&#34;等

如何确保传递给函数的参数作为变量(状态)存储在函数中?或者,我是否过度思考这个?真的,我只想测试我传递给state参数的内容是否可以打印用于测试目的。

。对不起101课。

1 个答案:

答案 0 :(得分:1)

您通常会在任何函数之外读取数据,如下所示:

outcome.data <- read.csv("outcome-of-care-measures.csv", colClasses = "character")

否则,由于函数有自己的namespace,因此函数内部定义的所有变量在返回时都会消失,除非它们本身由return(...)函数返回。通过将它们放入列表中可以返回多个对象:return(list(item1=var1, item2=var2))

某些功能(例如assign)具有envir参数,可以将其设置为.GlobalEnv以更改此行为。也可以使用<<-运算符而不是<-在函数内部更改对象,但通常建议不要这样做。

作为旁注,使用函数时,需要明确定义:

  1. 它的输入是什么
  2. 它做什么
  3. 它返回什么
  4. 例如,使用outcome作为函数参数然后读入名为income的变量csv文件的内容是没用的。你的论点是无用的,因为它将被写出来。这就是为什么你必须在函数中注释掉定义你的state变量的行,以便实际能够使用函数接收的state

    这肯定不会回答你所有的问题,但希望它可以帮助你澄清某些事情。其余的有很多很好的教程可以进一步学习如何在R中编程以及如何/何时使用函数。祝你好运,快乐学习!