我正在尝试创建一些表对象,我可以将其插入到未编织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")
```
我知道如何动态分配名称,但不知道如何使用向量作为指向对象的指针。
答案 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])))
}