如何在 R 中传递变量的名称
How to pass on the name of a variable in R
所以,我正在制作一个类似
的函数
example <- function(x, y){
z <- data.frame("variable name" = y, "Quantity of 1" = sum(x==1, na.rm = TRUE))
eval(as.character(y)) <<- z
}
list <- sample(c(0,1), size = 12, replace = TRUE)
如果我使用
评估我的函数
example(list, "list")
它给了我一个
error in eval(as.character(y)) <<- z: object 'y' not found
我希望函数给我一个变量,我可以通过传递给它的名称(如“Y”)找到它,因为我必须多次使用相同的过程。
我想你在找 assign
:
example <- function(x, y){
z <- data.frame("variable name" = y, "Quantity of 1" = sum(x==1, na.rm = TRUE))
assign(y, z, envir = parent.frame())
}
list <- sample(c(0,1), size = 12, replace = TRUE)
example(list, "list")
list
#> variable.name Quantity.of.1
#> 1 list 5
但是,请注意,这不是一个好主意。您应该尽量避免编写可以覆盖全局环境(或其他调用框架)中的对象的函数,因为这可能会产生意想不到的后果并且不是惯用的 R。
最好有:
example <- function(x, y){
data.frame("variable name" = y, "Quantity of 1" = sum(x==1, na.rm = TRUE))
}
并做
list <- example(list, "list")
或者,更好的是:
example <- function(x){
data.frame("variable name" = deparse(substitute(x)),
"Quantity of 1" = sum(x==1, na.rm = TRUE))
}
所以你可以这样做:
list <- example(list)
此外,最好避免使用像 list
这样的通用函数名作为变量名。
所以,我正在制作一个类似
的函数 example <- function(x, y){
z <- data.frame("variable name" = y, "Quantity of 1" = sum(x==1, na.rm = TRUE))
eval(as.character(y)) <<- z
}
list <- sample(c(0,1), size = 12, replace = TRUE)
如果我使用
评估我的函数example(list, "list")
它给了我一个
error in eval(as.character(y)) <<- z: object 'y' not found
我希望函数给我一个变量,我可以通过传递给它的名称(如“Y”)找到它,因为我必须多次使用相同的过程。
我想你在找 assign
:
example <- function(x, y){
z <- data.frame("variable name" = y, "Quantity of 1" = sum(x==1, na.rm = TRUE))
assign(y, z, envir = parent.frame())
}
list <- sample(c(0,1), size = 12, replace = TRUE)
example(list, "list")
list
#> variable.name Quantity.of.1
#> 1 list 5
但是,请注意,这不是一个好主意。您应该尽量避免编写可以覆盖全局环境(或其他调用框架)中的对象的函数,因为这可能会产生意想不到的后果并且不是惯用的 R。
最好有:
example <- function(x, y){
data.frame("variable name" = y, "Quantity of 1" = sum(x==1, na.rm = TRUE))
}
并做
list <- example(list, "list")
或者,更好的是:
example <- function(x){
data.frame("variable name" = deparse(substitute(x)),
"Quantity of 1" = sum(x==1, na.rm = TRUE))
}
所以你可以这样做:
list <- example(list)
此外,最好避免使用像 list
这样的通用函数名作为变量名。