我正在编写一个带有两个参数(状态,结果)的简单函数。状态用于稍后对数据帧进行子集化。
话虽如此,部分要求是状态是长度为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课。
答案 0 :(得分:1)
您通常会在任何函数之外读取数据,如下所示:
outcome.data <- read.csv("outcome-of-care-measures.csv", colClasses = "character")
否则,由于函数有自己的namespace
,因此函数内部定义的所有变量在返回时都会消失,除非它们本身由return(...)
函数返回。通过将它们放入列表中可以返回多个对象:return(list(item1=var1, item2=var2))
。
某些功能(例如assign
)具有envir
参数,可以将其设置为.GlobalEnv
以更改此行为。也可以使用<<-
运算符而不是<-
在函数内部更改对象,但通常建议不要这样做。
作为旁注,使用函数时,需要明确定义:
例如,使用outcome
作为函数参数然后读入名为income
的变量csv文件的内容是没用的。你的论点是无用的,因为它将被写出来。这就是为什么你必须在函数中注释掉定义你的state
变量的行,以便实际能够使用函数接收的state
。
这肯定不会回答你所有的问题,但希望它可以帮助你澄清某些事情。其余的有很多很好的教程可以进一步学习如何在R中编程以及如何/何时使用函数。祝你好运,快乐学习!