在保留类的同时,从R中的paste()输出中删除引号

在保留类的同时,从R中的paste()输出中删除引号,r,R,我有一个数据帧c1,其中一列作为区域 sum(is.na(c1$region)) [1] 2 class(c1$region) [1] "factor" 但是,当我使用粘贴时 f1<-paste("c1","$","region",sep="") > f1 [1] "c1$region" > sum(is.na(f1)) [1] 0 我尝试了as.namef1和as.symbolf1。两者都将f1转换为名称类。noquotef1将char[1]元素转换为noquote

我有一个数据帧c1,其中一列作为区域

sum(is.na(c1$region))
[1] 2

class(c1$region)
[1] "factor"
但是,当我使用粘贴时

f1<-paste("c1","$","region",sep="")

> f1
[1] "c1$region"

> sum(is.na(f1))
[1] 0
我尝试了as.namef1和as.symbolf1。两者都将f1转换为名称类。noquotef1将char[1]元素转换为noquote类

> f2<-as.name(f1)

> f2
`c1$region`

> sum(is.na(f2))
[1] 0
Warning message:
In is.na(f2) : is.na() applied to non-(list or vector) of type 'symbol'

> class(f2)
[1] "name"

我希望保留c1$region类,同时能够在sumis.naf2之类的查询中使用它。请帮助。

我不能100%确定我是否理解您的意图,但这可能会有所帮助:

c1 <- data.frame(region=c(letters[1:3], NA))
clust <- 1
variable <- "region"

f1 <- get(paste0("c", clust))[[variable]]   # <--- key step
class(f1)
# [1] "factor"
sum(is.na(f1))
# [1] 1

在关键步骤中,我们使用get获取正确的集群数据帧,使用其名称作为特征向量,然后使用[[,与$不同,它允许我们使用字符变量来指定所需的列。

请参阅,以获取有关为什么不能执行您尝试执行的操作的更多信息。尽管这不是一种流行的方法,但sumis.naevalpassetext=f1将使用您的f1构建变量名和索引,就像它们是纯字符串一样,这在R中是一个糟糕的主意。是吗你确定这是真的需要吗?似乎你应该使用适当的列表对象来存储相关数据,而不是在全局环境中使用一堆不同的变量。@Ujjwal,请注意Flick先生的评论。我只是有点懒,决定不进行谩骂,但如果你是以编程方式在工作区中引用变量的话在这里使用CX变量的情况下,你应该考虑把它们放在列表中。