将参数传递给函数,以及 R 中的变量作用域

Passing arguments to functions, and variable scopes in R

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

话虽如此,部分要求是 state 是一个长度为 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)

我得到的只是:“”“”

如果我注释掉 #state <- ... 那么它会很好地传递参数并打印 "FOO" 或 "AXA" 或 "TX" 等

如何确保传递给函数的参数在函数中存储为变量(状态)?或者,我是不是想多了?实际上,我只是想测试一下我传递给状态参数的内容是否可以打印出来用于测试目的。

。对不起第101课。

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

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

否则,由于一个函数有它自己的 namespace,它内部定义的所有变量都将在它的 return 上消失,除非它们本身被函数 return 编辑return(...)。可以通过将多个对象放在列表中来 [=​​44=]ed:return(list(item1=var1, item2=var2)).

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

附带说明,使用函数时,需要明确定义:

  1. 它的输入是什么
  2. 它有什么作用
  3. 它是什么return

例如,将outcome用作函数参数,然后将csv文件的内容读入名为income的变量中是没有用的。你的论点就没用了,因为它会被重写。这就是为什么您必须在函数内注释掉定义 state 变量的行,以便实际能够使用函数接收到的 state

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