我正在尝试创建串联的字符串并将其传递给函数。假设我想创建一个数据框列表,可以将其传递给函数。问题是使用“ noquote”功能的连接字符串被视为“ noquote”对象,而不是我想要的列表。这是一个可重现的示例。如果我使用data <- dflist1
定义数据,那么我得到了想要的东西,但是当我尝试data1 <- noquote(paste0("dflist", selection))
时,它不会返回相同的列表。
是否可以通过仅更改selection
来创建所需列表?
在我面临的实际问题中,需要以这种方式更改多个函数参数,因此学习如何实现此技巧将非常有帮助。
任何评论将不胜感激!
a <- data.frame(aa = c(1,2,3), bb = c(4,5,6))
b <- data.frame(cc = c(11,12,13), dd = c(41,51,61))
dflist1 <- list(a, b)
dflist2 <- list(a, b, a, b)
selection <- "1" # I want to make a choice here
data <- dflist1
data1 <- noquote(paste0("dflist", selection))
print(data1)
[1] dflist1
print(data)
[[1]]
aa bb
1 1 4
2 2 5
3 3 6
[[2]]
cc dd
1 11 41
2 12 51
3 13 61
class(data)
[1] "list"
class(data1)
[1] "noquote"
答案 0 :(得分:3)
我们可以使用get
返回值
get(data1)
#[[1]]
# aa bb
#1 1 4
#2 2 5
#3 3 6
#[[2]]
# cc dd
#1 11 41
#2 12 51
#3 13 61
如果我们检查str(data1)
,将会了解到,在“字符”之上,它会添加一个class
noquote
str(data1)
#'noquote' chr "dflist1"
class(data1)
#[1] "noquote"
通过更改属性
noquote
#function (obj, right = FALSE)
#{
# if (!inherits(obj, "noquote"))
# class(obj) <- c(attr(obj, "class"), if (right) c(right = "noquote") else "noquote")
# obj
#}
paste0
以字符串形式返回对象名称,无需使用noquote
。简单地,用get
包装,它返回该list
的值,或者如果有多个对象,则使用mget