2015-04-18 2 views
4

Это кажется таким простым, но независимо от того, какую * функцию приложения я использую, правильный ответ ускользает от меня. Я не пробовал какой-либо другой пакет, потому что он кажется * применимым, безусловно, должен быть в состоянии сделать это.Применить пасту над списком векторов, чтобы получить список строк

Мои данные:

data = list(foo=c("first", "m", "last"), bar=c("first", "m", "last")) 

То, что я действительно думаю, что должно работать:

lapply(data, FUN=paste) 

Но это дает мне:

$foo 
[1] "first" "m"  "last" 

$bar 
[1] "first" "m"  "last" 

Я хочу:

$foo 
[1] "first m last" 
$bar 
[1] "first m last" 

Конечно, я попытался целую кучу других вещей:

> paste(data) 
[1] "c(\"first\", \"m\", \"last\")" "c(\"first\", \"m\", \"last\")" 
> paste(data, collapse = "") 
[1] "c(\"first\", \"m\", \"last\")c(\"first\", \"m\", \"last\")" 
> paste(data, sep = "") 
[1] "c(\"first\", \"m\", \"last\")" "c(\"first\", \"m\", \"last\")" 
> paste(data, collapse = "", sep="") 
[1] "c(\"first\", \"m\", \"last\")c(\"first\", \"m\", \"last\")" 
> paste(as.vector(data), collapse = "", sep="") 
[1] "c(\"first\", \"m\", \"last\")c(\"first\", \"m\", \"last\")" 
> paste(c(data), collapse = "", sep="") 
[1] "c(\"first\", \"m\", \"last\")c(\"first\", \"m\", \"last\")" 
> paste(c(data, recursive = T), collapse = "", sep="") 
[1] "firstmlastfirstmlast" 

Я не понимаю, где цитируемый «с» нонсенс откуда.

+0

'lapply (данные, паста, коллапс =" «) ' –

+0

Ух, это работает. Опубликовать в качестве ответа? –

ответ

6

Ваш первоначальный подход был почти правильно, вам просто нужно добавить collapse = " ", чтобы сцепить векторы в одну строку в каждом элементе вашего списка

lapply(data, paste, collapse = " ") 
# $foo 
# [1] "first m last" 
# 
# $bar 
# [1] "first m last" 
Смежные вопросы