使用vector中的名称在R中打印表

时间:2015-03-13 19:44:35

标签: r

我正在尝试创建一些表对象,我可以将其插入到未编织Knit的html页面中,并且希望能够遍历名称向量来打印相应的表。

例如:

TabA = as.table(cbind(c("A","B","C"),c(1,2,3)))
TabB = as.table(cbind(c("D","E","F"),c(1,2,3)))

nams = c("TabA","TabB")

然后在html中使用R markdown

Example Table: `r nams[4] `

```{r}
knitr::kable(t(nams[4]),format = "markdown")
```

我知道如何动态分配名称,但不知道如何使用向量作为指向对象的指针。

5 个答案:

答案 0 :(得分:3)

不确定html文件的位置,但是对于名称问题,使用列表可能更明智(从而避免对字符串进行任何评估):

my.tables <- list(TabA=as.table(cbind(c("A","B","C"),c(1,2,3))),
                  TabB=as.table(cbind(c("D","E","F"),c(1,2,3))))

for(tab.name in names(my.tables))
  print(my.tables[[tab.name]])

# Or if you don't like loops
invisible(lapply(my.tables, print))

#   A B
# A A 1
# B B 2
# C C 3
#   A B
# A D 1
# B E 2
# C F 3

答案 1 :(得分:1)

您可以使用get,如:

tab = get(nams[i])print(get(nams[i]))

get("string")返回名称等于"string"

的对象

答案 2 :(得分:0)

eval(parse(text="some clever text here"))将获取一个字符串并将其作为表达式进行评估。你可以尝试类似下面的内容

for(i in names) {
    print(eval(parse(text = i)))
}

解析:https://stat.ethz.ch/R-manual/R-devel/library/base/html/eval.html

eval:https://stat.ethz.ch/R-manual/R-devel/library/base/html/parse.html

答案 3 :(得分:0)

如果您只是想要打印的副作用,那么这会成功,没有循环或笨重的eval(parse(.))mget函数提供隐式循环:

invisible(sapply( mget(nams), print))
  A B
A A 1
B B 2
C C 3
  A B
A D 1
B E 2
C F 3

invisible用于取消print返回sapply的额外值。如果将结果分配给临时变量,也可以删除不可见的包装器。

答案 4 :(得分:-1)

您应该使用eval和as.name

TabA = as.table(cbind(c("A","B","C"),c(1,2,3))) 
TabB = as.table(cbind(c("D","E","F"),c(1,2,3)))

nams = c("TabA","TabB")

for (i in 1:length(nams)) {
    print(eval(as.name(nams[i])))
}