我是新來的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',但它會變得非常堅韌。還有其他的方法可以完成同樣的任務,但是這並不完全清楚你的目標是什麼。 –