我有以下矢量列表
v1 <- c("foo","bar")
v2 <- c("qux","uip","lsi")
mylist <- list(v1,v2)
mylist
#> [[1]]
#> [1] "foo" "bar"
#>
#> [[2]]
#> [1] "qux" "uip" "lsi"
我想要做的是应用一个函数,以便它打印出这个字符串:
v1:foo,bar
v2:qux,uip,lsi
所以它涉及两个步骤:1)将对象变量转换为字符串和 2)将矢量转换为字符串。后者很容易,因为我能做到这一点:
make_string <- function (content_vector) {
cat(content_vector,sep=",")
}
make_string(mylist[[1]])
# foo,bar
make_string(mylist[[2]])
# qux,uip,lsi
我知道this solution,但我不知道如何将对象名称转换为函数中的字符串,以便 它打印得像我想要的输出。
我需要在函数内部,因为我需要处理许多其他输出。
答案 0 :(得分:3)
我们可以使用
cat(paste(c('v1', 'v2'), sapply(mylist, toString), sep=":", collapse="\n"), '\n')
#v1:foo, bar
#v2:qux, uip, lsi
如果我们需要传递原始对象,即'v1','v2'
make_string <- function(vec){
obj <- deparse(substitute(vec))
paste(obj, toString(vec), sep=":")
}
make_string(v1)
#[1] "v1:foo, bar"
答案 1 :(得分:1)
如果要使用列表,可以将列表中的对象命名为能够在函数中使用它们。如果您只想返回一个字符串,请删除cat
。
v1 <- c("foo","bar")
v2 <- c("qux","uip","lsi")
# objects given names here
mylist <- list("v1" = v1, "v2" = v2)
# see names now next to the $
mylist
$v1
[1] "foo" "bar"
$v2
[1] "qux" "uip" "lsi"
make_string <- function (content_vector) {
vecname <- names(content_vector)
cat(paste0(vecname, ":", paste(sapply(content_vector, toString), sep = ",")))
}
make_string(mylist[1])
v1:foo, bar
make_string(mylist[2])
v2:qux, uip, lsi