2016-12-26 5 views
0
x <- "Hello World" 

</p> <pre><code>x <- strsplit(x, " ") </code></pre> <p>X [후, 나는 문자열이있는 경우

가 어떻게 문자열 분할을 사용하여, 두 번째 단어, "세계"에 액세스 할 수 있습니다

R에 분할 문자열의 요소에 액세스 [2]] 아무것도하지 않습니다.

+1

그것은'의 :

x <- input %>% strsplit(" ") %>% sapply("[", 2) > x [1] "world" "there" "at" 

또는 마지막 단어에 대한

x [[1]] [2]'. 'strsplit'는리스트를 반환합니다. 분할 문자열은 목록 결과의 첫 번째 요소에 있습니다. ''세계''는 그 요소의 두 번째 가치입니다. 'scan (text = x, what = "") [2]'도 할 수있다. –

답변

1

주석에서 언급했듯이 strsplit은 목록 개체를 반환한다는 것을 알고 있어야합니다. 귀하의 예제는 하나의 항목 (길이 1의 벡터)을 분할하기 때문에 목록의 길이는 1입니다. 길이가 3 인 벡터 (분할 할 텍스트 항목 3 개)를 입력하여 약간 다른 예를 설명하겠습니다 :

input <- c("Hello world", "Hi there", "Back at ya") 

x <- strsplit(input, " ") 

> x 
[[1]] 
[1] "Hello" "world" 

[[2]] 
[1] "Hi" "there" 

[[3]] 
[1] "Back" "at" "ya" 

반환 된 목록에는 입력 벡터의 각 요소에 하나씩, 세 개의 요소가 있습니다. 각 목록 요소는 strsplit 호출에 따라 분할됩니다. 그래서 우리는 [[를 사용하여 이러한 목록 요소 중 하나를 호출 할 수 있습니다 (이것은 당신의 x[[2]] 호출이 무엇을하고 있었는지,하지만 당신은 당신이 대가로 아무것도 얻을 수없는 이유입니다, 하나 개의 목록 요소를했다) : 이제

> x[[1]] 
[1] "Hello" "world" 

> x[[3]] 
[1] "Back" "at" "ya" 

을 우리가 [ 호출을 추가하여 그 목록 요소의 두 번째 부분을 얻을 수 있습니다 :

> x[[1]][2] 
[1] "world" 

> x[[3]][2] 
[1] "at" 

이 각 목록 요소에서 두 번째 항목을 반환됩니다 ("뒤로 가게에서"입력 "에서"돌아왔다 있습니다 이 경우). apply 제품군의 항목을 사용하여 모든 항목에 대해이 작업을 동시에 수행 할 수 있습니다.

> sapply(x, "[", 2) 
[1] "world" "there" "at" 

여기 입력 (2) 동작 x[2]을 의미하는 [ 운영자에게 전달의 마지막 값리스트의 모든 요소에 적용된다 : sapply 아마도이 경우에 좋을 것이다 벡터를 리턴한다. 대신 두 번째 항목으로, 각 목록 요소의 마지막 항목을 원하는 경우

, 우리는 [ 대신 sapply 호출 내에서 tail를 사용할 수 있습니다

> sapply(x, tail, 1) 
[1] "world" "there" "ya" 

이 시간, 우리가했습니다 모든 목록 요소에 tail(x, 1)을 적용하여 마지막 항목을 제공했습니다. 선호로

,이 같은 조치를 적용하는 나의 마음에 드는 방법과 같이 두 번째 단어를 들어, magrittr 파이프입니다 :

x <- input %>% 
    strsplit(" ") %>% 
    sapply(tail, 1) 

> x 
[1] "world" "there" "ya" 
관련 문제