我试图调用一个矢量" a"来自数据框" df"使用功能。我知道我可以通过以下方式做到这一点:
> df$a
[1] 1 2 3
但是我想使用一个函数,其中数据框和向量名称都作为参数单独输入。这是我提出的最好的:
show_vector <- function(data.set, column) {
data.set$column
}
但是,当我试一试时,这是怎么回事:
> show_vector(df, a)
NULL
如何更改此函数以成功引用向量df $ a,其中两者的名称作为参数输入到函数中?
答案 0 :(得分:2)
实际上可以在不将列名称作为字符串传递的情况下执行此操作(换句话说,您可以传入未加引号的列名称:
show_vector <- function(data.set, column) {
eval(substitute(column), envir = data.set)
}
用法示例:
df <- data.frame(a = 1:3, b = 4:6)
show_vector(df, b)
# 4 5 6
答案 1 :(得分:1)
我过去常常想过这种事情而且很难找到一个简单的方法。我提出的最好的是:
df <- data.frame(c(1, 2, 3), c(4, 5, 6))
colnames(df) <- c("A", "B")
test <- function(dataframe, columnName) {
return(dataframe[, match(columnName, colnames(dataframe))])
}
test(df, "A")
答案 2 :(得分:1)
您可以使用substitute
捕获输入向量名称,然后使用`as.character将其作为字符。
show_vector <- function(data.set, column) {
data.set[,as.character(substitute(column))]
}
现在让我们来看看:
(dat=data.frame(a=1:3,b=4:6,c=10:12))
a b c
1 1 4 10
2 2 5 11
3 3 6 12
show_vector(dat,a)
[1] 1 2 3
show_vector(dat,"a")
[1] 1 2 3
有效。
我们也可以编写一个简单的输入字符串:
show_vector1 <- function(data.set, column) {
data.set[,column]
}
show_vector1(dat,"a")
[1] 1 2 3
虽然如果列名不是字符,这将不起作用:
show_vector1(dat,a)
**Show Traceback
Rerun with Debug
Error in `[.data.frame`(data.set, , column) : undefined columns selected**
答案 3 :(得分:1)
如果您只将列名称放在引号中,即show_vector(df, "a")
其他多种方法:
使用基本功能
func <- function(df, cname){
return(df[, grep(cname, colnames(df))])
}
甚至
func <- function(df, cname){
return(df[, cname])
}