提供子集参数作为文本字符串的子集数据函数
function to subset data supplying subset argument as text string
m <- matrix(1:4, ncol=2)
l <- list(a=1:3, b='c')
d <- data.frame(a=1:3, b=3:1)
我想知道是否有可能制作一个函数,它接受一个基本的 R 对象(矩阵、向量、列表或 data.frame,...)以及一个指定 R 对象子集的文本对象。
f1 <- function(object, subset) {
# object'subset'
}
例如
f1(m, '[1,1]') #to evaluate m[1,1]
f1(l, '[[1]][2:3]') #l[[1]][2:3]
f1(d, '$a') #d$a
会给我们(分别):
[1] 1
[1] 2 3
[1] 1 2 3
我想这个函数在求值之前需要以某种方式粘合两个参数。我想可以为子集文本的每一位制作一种解释器,并且(对于矩阵示例)做类似的事情:
`[`(1,1)
这是可能的,但我认为会有更简单更直接的方法(我上面的 'glue')。
f1<-function(object, subset){
return(eval(parse(text=paste0(substitute(object),subset))))
}
> m=matrix(4,2,2)
> l=list(c(1,2,3),c(2,3,4))
> f1(m,'[1,1]')
[1] 4
> f1(l,'[[1]][1:2]')
[1] 1 2
好吧,一种方法是使用 eval(parse))
方法,即
f1 <- function(x, text){
eval(parse(text = paste0(x, text)))
}
f1('d', '$a')
#[1] 1 2 3
f1('m', '[1,1]')
#[1] 1
f1('l', '[[1]][2:3]')
#[1] 2 3
m <- matrix(1:4, ncol=2)
l <- list(a=1:3, b='c')
d <- data.frame(a=1:3, b=3:1)
我想知道是否有可能制作一个函数,它接受一个基本的 R 对象(矩阵、向量、列表或 data.frame,...)以及一个指定 R 对象子集的文本对象。
f1 <- function(object, subset) {
# object'subset'
}
例如
f1(m, '[1,1]') #to evaluate m[1,1]
f1(l, '[[1]][2:3]') #l[[1]][2:3]
f1(d, '$a') #d$a
会给我们(分别):
[1] 1
[1] 2 3
[1] 1 2 3
我想这个函数在求值之前需要以某种方式粘合两个参数。我想可以为子集文本的每一位制作一种解释器,并且(对于矩阵示例)做类似的事情:
`[`(1,1)
这是可能的,但我认为会有更简单更直接的方法(我上面的 'glue')。
f1<-function(object, subset){
return(eval(parse(text=paste0(substitute(object),subset))))
}
> m=matrix(4,2,2)
> l=list(c(1,2,3),c(2,3,4))
> f1(m,'[1,1]')
[1] 4
> f1(l,'[[1]][1:2]')
[1] 1 2
好吧,一种方法是使用 eval(parse))
方法,即
f1 <- function(x, text){
eval(parse(text = paste0(x, text)))
}
f1('d', '$a')
#[1] 1 2 3
f1('m', '[1,1]')
#[1] 1
f1('l', '[[1]][2:3]')
#[1] 2 3