如何将对象变量转换为函数内的字符串

时间:2017-07-26 07:45:28

标签: r

我有以下矢量列表


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,但我不知道如何将对象名称转换为函数中的字符串,以便 它打印得像我想要的输出。

我需要在函数内部,因为我需要处理许多其他输出。

2 个答案:

答案 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