2017-07-26 82 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 
相關問題