我是新来的R,所以请原谅(正确)我,如果我的语言是不准确的。R的变化与函数参数输出对象名称
我已经写一个程序来装载数据,创建一个列联表(使用XTABS),在其上运行的一些外部的功能,并且输出结果的表。我在我的完整数据集上运行了代码,并且希望在我的数据的子集上运行相同的代码。我包裹起来的代码作为一个功能,并希望能够能够通过名称的子集(SUBNAM)和子表达(SUBEXP)在函数调用类似的论点:
HCACC <- function (SUBNAM, SUBEXP) {
CM.SUBNAM <- as.matrix(
xtabs(~HC_map+HC_obs, data=VVD
, drop.unused.levels=FALSE, sparse=TRUE
, subset=(SUBEXP)
))
AKw.SUBNAM <- kw(CM.SUBNAM, wtHC)
USER.SUBNAM <- as.data.frame(AKw.SUBNAM$user.wa)
write.csv(HCACC.SUBNAM, file="HCACC.SUBNAM.csv", row.names=TRUE)
}
HCACC(2013, Year == 2013)
HCACC(JMDR, Observer == "JMDR")
(最后三行是我想要的SUBNAM实例中,实际上有40个实例)
我想与CM.2013,CM.JMDR等来结束,而无需复制/粘贴&反复查找/替换代码。
似乎必须有一种方法来做到这一点,但我尝试它的方式没有奏效,而且我的谷歌搜索没有改变任何事情(但我怀疑我可能一直在问错误的问题)。任何提示或指针,将不胜感激。
*EDIT*
为了澄清,我愿意在比作为参数的其他函数传递子集的名字和表达的其他方法。我只是希望能够在不同的子集上多次重复分析/代码并输出相应的命令。感谢您的见解!
我不太熟悉xtabs和kw函数,但我认为你的SUBEXP表达式必须是一个字符。 'Year == 2013'并不完全是你可以传递给你的函数的一个参数(我不认为)。您可能需要将它作为字符串传递,然后使用'eval(parse(text = SUBEXP))'。如果我误解了你的问题,我很抱歉。 –
我怀疑你会得到任何答案,除非你向人们显示你的输入数据并给他们一个'dput()'。问问你自己,如果有人向你展示了你发布的功能 - 你能否解读它而不看数据? –
为了让你朝着正确的方向前进,当你在一个函数(或其他地方)中传递类似'Year == 2013'或'Observer ==“JMDR”'的东西时,你实际传递的是一个逻辑向量,它的值是“变量Year的每个值是否等于2013”。你可能意思是使用函数'quote'或'expression',但它会变得非常坚韧。还有其他的方法可以完成同样的任务,但是这并不完全清楚你的目标是什么。 –