2017-07-26 87 views
2

我有载体如何对象变量转换成字符串函数内部


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)使所述载体为s特林。后者是容易,我可以这样做:

make_string <- function (content_vector) { 
    cat(content_vector,sep=",") 
} 

make_string(mylist[[1]]) 
# foo,bar 
make_string(mylist[[2]]) 
# qux,uip,lsi 

我知道this solution,但我不知道我怎么可以把对象名称到一个字符串函数内使 它打印像我想要的输出。

我需要在这里面一个函数,因为还有很多其他的输出需要处理。

+1

但是'make_string'函数参数中的'v1'在哪里 – akrun

+0

@akrun这就是我发布的原因。我不知道如何将'v1和v2'转换为'make_string'内的字符串。 – pdubois

+1

好吧,那么当你通过mylist [[1]]时,我们需要传递'v1'和'v2'bcz'没有'v1' – akrun

回答

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" 
+0

'v1'和'v2'被硬编码为字符串。但我需要从对象转换为字符串。 – pdubois

+1

@pdubois DId你打算把它分配给两个矢量对象 – akrun

+0

我的意思是我需要'v1,v2'作为对象而不是字符串传递。查看我的更新。 – pdubois

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 
相关问题