2014-11-25 3 views
1

역함수 인 strsplitpaste의 동작을 이해하려고합니다. 내가 다시 함께 목록의 lapplycat의 요소를 사용하여 시도목록이있는 붙여 넣기 사용

> strsplit(c("on,e","tw,o","thre,e","fou,r"),",") 
[[1]] 
[1] "on" "e" 

[[2]] 
[1] "tw" "o" 

[[3]] 
[1] "thre" "e" 

[[4]] 
[1] "fou" "r" 

,하지만 작동하지 않습니다 : 나는 벡터를 strsplit 그러나, 목록이 너무 좋아, 반환

> lapply(strsplit(c("on,e","tw,o","thre,e","fou,r"),","),cat) 
on etw othre efou r[[1]] 
NULL 

[[2]] 
NULL 

[[3]] 
NULL 

[[4]] 
NULL 

cat 대신 paste과 같은 공식이 실제로 아무것도하지 않습니다! 이러한 결과가 나타나는 이유는 무엇입니까? 원하는 결과를 얻으려면 어떻게해야합니까? 원래 벡터가 다시 나타납니다.

(물론, 내 실제 코드에서 나는 더 strsplitcat 그냥 원래 벡터를 돌아보다 할 노력하고있어,하지만 난이 문제에 대한 해결책이 광산을 위해 일 것이라 생각합니다. 감사합니다!)

+0

아름답다. 감사! –

+0

@RichardScriven 'cat'이 이상한 결과를주는 이유에 대한 통찰력이 있습니까? –

+0

'cat' 인자를'보이지 않는 것 (sapply (strsplit (x, ","), cat, sep = ",")) 메신저로 대답 할 수 있습니다. –

답변

5

예, cat은 연결되어 콘솔에 인쇄되지만 실제로는 동일한 방법으로 작동하지 않습니다. paste. 그것은 최고의 pastehelp("cat")

collapse 인수 설명 및 결과 것은 효과적으로 strsplit에서 split 인수의 반대입니다. sapply을 사용하면 단순 붙여 넣기 벡터를 반환 할 수 있습니다. 이런 경우에, vapplysapply보다 더 효율적으로 될 것

x <- c("on,e","tw,o","thre,e","fou,r") 

(y <- sapply(strsplit(x, ","), paste, collapse = ",")) 
# [1] "on,e" "tw,o" "thre,e" "fou,r" 
(z <- vapply(strsplit(x, ","), paste, character(1L), collapse = ",")) 
# [1] "on,e" "tw,o" "thre,e" "fou,r" 

identical(x, y) 
# [1] TRUE 
identical(x, z) 
# [1] TRUE 

참고. 그리고 fixed = TRUEstrsplit에 추가하면 효율성이 높아집니다.