2010-06-02 3 views
0

R의 함수에 파일 경로를 전달하려고했지만 실패했습니다./여기 누군가가 나를 도울 수 있기를 바랍니다. 나는 함수를 호출 할 때파일 경로를 R 함수에 전달 하시겠습니까?

>heat <- function(filepath) 
{ chicks <- read.table(file=filepath, dec=",", header=TRUE, sep="\t") 
... 
} 

는 아무것도

>heat("/home/.../file.txt") 

... 어떻게하지 ... 그리고 "병아리"

>chicks 
Error: Object 'chicks' not found 

을 통과하는 올바른 방법은 무엇인가를 찾을 수 없습니다 함수 경로?

+2

'return (chicks)'? (비록 내가 약간을 얻으면 나는 결코 그들을 돌려주지 않을 것이다. ..)]] – aL3xa

+0

젠장, 당신은 옳다!! 어리석은 생각 !! 방금 전체 코드를 삭제했습니다.) – Philipp

답변

6

(파일이있는 경우) 그대로 파일 경로를 전달할 수 있어야합니다. list.files() [full.names=TRUE] 인수를 사용하여 R 파일 경로를 쿼리 할 수도 있습니다. 그러나이 경우에는 함수에 국한되어 있으므로이 변수를 함수 외부에서 볼 수 없기 때문에 chicks을 볼 수 없다고 생각합니다. 또한, 마지막 표현식이 과제 인 경우 출력이 인쇄되지 않는다고 생각합니다. 시도

> heat <- function(filepath) { 
+ read.table(file=filepath, dec=",", header=TRUE, sep="\t") 
+ } 
> heat("/home/.../file.txt") 

또는

> chicks <- heat("/home/.../file.txt") 
> chicks 

하고 chicks을 볼 수 있습니다. 아니면 문을 괄호로 추가 지정하면서 인쇄보고 싶다면 :

> (chicks <- heat("/home/.../file.txt")) 

을 당신이 함수 내에서 chicks에 할당 여전히 기능이 완료된 후를보고 싶다면

> heat <- function(filepath) { 
+ chicks <- read.table(file=filepath, dec=",", header=TRUE, sep="\t") 
+ assign("chicks",chicks,globalenv()) 
+ } 
+0

"그러나이 경우 함수 대신 로컬이므로 함수 대신이 변수를 볼 수 없으므로 병아리를 볼 수 없다고 생각합니다." 아아, 그게 문제였습니다 ^^ 고마워요 !! 나는 더 일찍 물어야했다. 대략 2 시간을 요했다 : D – Philipp

1
그러나, 위의 예에서

heat <- function(filepath){ 
    if(!file.exists(filepath)){ 
     stop(sprintf("Filepath %s does not exist",filepath)) 
    } 
    ... 
} 

,,321 : 경로로 작업 할 때

또한, 파일/폴더가 있는지 여부를 테스트하는 것이 도움이된다 파일이 없으면 0으로 오류 메시지가 표시됩니다.

+0

고마워, 매우 유용하다 :) – Philipp

2

이 함수는 출력하려는 ​​내용을 알 수 없습니다. 그것을 지정하지 않으면, 출력은 마지막으로 실행 가능한 행이 될 것이고, 항상 원하는 것은 아닐 수도 있습니다. 객체로 나올 내용을 지정하려면 return()을 사용하십시오.

heat <- function(filepath) { 
chicks <- read.table(file=filepath, dec=",", header=TRUE, sep="\t") 
... 
return(chicks) 
} 

inpt <- heat("/.../file.txt") 

이 정보가 도움이 되었습니까?

+0

실제로 반환 값은 필요 없지만이 함수는 PDF 파일로 저장되는 입력 데이터의 히트 맵을 작성한다. 문제는 경로가 올바르게 통과되면 병아리를 테스트하고 싶다는 것입니다. 그러나 이것은 전혀 필요하지 않았습니다. 방금 코드를 완성해야했지만 모두 잘되었습니다 .-) 어쨌든 고맙게도, 배울 점이 많습니다. :-) – Philipp