2017-12-22 28 views
4

죄송 합니다만, 제목에 사용 된 용어가 올바르게 사용되지 않을 수 있습니다. 이 코드를 실행하려고하면 명령을 실행하려고 시도하지만 명령을 완료하지 않은 것처럼 보입니다. 정지 명령 기호 (빨간색)를 클릭해도 아무 것도하지 않습니다. 나는 R에서 닫을 수 없습니다. 왜 이걸 영원히 뛰어 가야합니까? RStudio에서 작업 할 때 사용할 수 있지만입력을 읽으려는 중 "연결"을 사용하려고하면 R이 멈추거나 손상됩니다.

con <- file('stdin', open = 'r') 

inputs <- readLines(con) 
+1

하는'readlines도 (표준 입력을()) 시도' –

+1

이 관련이 될 수도 있습니다 : https://stackoverflow.com/questions/30191232/use-stdin-from-within-r-studio – InfiniteFlashChess

+0

@RADO, 내가 ' 당신이 받아들이는 대답에 현상금을 수여 할 것입니다. – InfiniteFlashChess

답변

5

, 당신은 오히려 readLines(file('stdin'))보다 readLines(stdin())를 사용할 필요가 어느 터미널에서 R을 실행하는 경우.

그러나 RStudio를 사용하고 있기 때문에 입력 줄 수를 지정하지 않으면 문제가 발생합니다. stdin에서 입력을 읽을 때 Ctrl + D은 입력의 끝을 알립니다. 그러나 터미널 Ctrl+D is unavailable이 아니라 RStudio에서이 작업을 수행하는 경우 입력 줄을 지정하지 않으면 stdin에서 읽기를 종료 할 수 없습니다. 당신은 터미널에서 R을 실행하는 경우

그래서, 당신의 코드가 작동, 당신은 Ctrl 키 + D를 통해 입력의 끝을. RStudio에서 작업해야한다면 여전히 readLines(stdin())if you know the number of lines of input을 사용할 수 있습니다. 예를 들어,

> readLines(stdin(), n=2) 
Hello 
World 
[1] "Hello" "World" 

또 다른 해결 방법은 (난 그냥 입력을 종료를 입력 누르면 세 번째 줄에), 예컨대 :

> scan(,'') 
1: Hello 
2: World 
3: 
Read 2 items 
[1] "Hello" "World" 

scan()을 사용하는 것입니다. 이점은 미리 입력 줄 수를 알 필요가 없다는 것입니다.

1

RStudio는 R에 다소 간접적으로 연결됩니다 (적어도 4 years ago은 stdin을 아무데도 리디렉션하지 않음). 아마도 우리의 목적을 위해서 임베디드되어있을 것입니다. 이는 아마도 stdin()이 readLines와 쌍을 이루었을 때 작동 할 수있는 이유 중 일부일 것입니다 (파일 연결이 아닌 터미널 연결을 만듭니다). @ duckmayr의 scan() 솔루션은

... 데이터 값을 읽을 수있는 파일의 이름 매우 좋은이며,이 상황에서 작동하는 물건의 종류로 설명되어 있습니다. 지정된 파일이 ""이면 입력이 리디렉션되거나 R이 포함 된 경우 을 읽는 모든 키보드 (또는 stdin()이 무엇이든간에)가 입력됩니다.

빈 입력을 '괜찮음'으로 간주하려는 경우 루프백을 만드는 항목 (예 : 'EOF')과 함께 한 줄에서 데이터를 가져 오는 동안 반복 할 수 있습니다.

input <- function() { 
    entry <- '' 
    while (!any(entry == "EOF")) { 
    entry <- c(readline(), entry) 
    } 
    return(entry[-1]) 
}