我正在使用一个现有功能,该功能使用match.call
捕获输入并使用此输入定义数据框。我想使用sapply
将字符串名称的向量应用于与数据框中的变量名称匹配的函数。但是,该函数捕获sapply
i
,因此,此功能不起作用。
任何指导将不胜感激。也开放使用sapply
的替代方法。
# Generate data
dat = sapply(1:5, function(i){rnorm(n = 10, mean = i)})
dat = as.data.frame(dat)
> dat
V1 V2 V3 V4 V5
1 2.7305301 3.2459056 2.366443 3.274836 4.902216
2 0.3809082 2.5033985 3.095093 2.675995 7.397180
3 1.8283385 0.4956617 2.004782 3.985234 4.689735
4 0.8450546 2.1390986 5.277488 6.052577 5.167756
5 2.7092999 4.0838629 1.683245 5.094684 5.306989
6 1.0471351 2.0033031 1.031404 3.126332 3.519315
7 0.2491428 0.3844910 2.670281 4.141592 5.318283
8 0.3319631 3.0790678 3.653437 1.500079 4.567699
9 0.9759534 0.7928414 3.549303 4.948636 4.952653
10 0.8205076 1.2129117 2.418991 4.833864 5.170205
# Toy function with match call
toy <- function(x, dataset){
args <- as.list(match.call())
x <- eval(args$x, dataset)
if (class(x) == "character"){x <- get(x, dataset)}
newdat = data.frame(x)
return(newdat)
}
# Example use of toy
toy(x = "V1", dataset = dat)
x
1 2.7305301
2 0.3809082
3 1.8283385
4 0.8450546
5 2.7092999
6 1.0471351
7 0.2491428
8 0.3319631
9 0.9759534
10 0.8205076
# What I would like to do:
sapply(c("V1", "V2"), function(i){
toy(x = i, dataset = dat)
})
Error in eval(args$x, dataset) : object 'i' not found