目標是能夠使用「子集表達式」(不是邏輯向量)作爲用戶定義函數的(可選)參數並使用它來計算數據幀的子集。使子集()在函數中工作
x <- data.frame(a=1, b=gl(2,5))
f <- function(data, subset) {
if (!missing(subset))
data <- subset(data, subset)
data
}
上面的代碼無法正常工作,而且也不
f <- function(data, subset) {
if (!missing(subset))
data <- data[with(data, subset), ]
data
}
在這兩種情況下,當供給subset
我得到一個錯誤。
> f(x, b == 2)
Error in f(x, b == 2) (from frame.r!322341dM#2) : object 'b' not found
所需的輸出:
> f(x)
a b
1 1 1
2 1 1
3 1 1
4 1 1
5 1 1
6 1 2
7 1 2
8 1 2
9 1 2
10 1 2
> f(x, b == 2)
a b
6 1 2
7 1 2
8 1 2
9 1 2
10 1 2
您需要'x $ b == 2'。 – G5W
b不是變量,它是x中的一列,所以您需要它以R理解的方式輸入函數(或者粘貼到函數中)。它可以如G5W所說,或者你可以設置函數來獲取三個屬性,數據框,列名和值,然後將它們粘貼在函數中以提取所需的輸出。 – sconfluentus