2014-07-22 3 views
1

다음 코드에서 오는 .Fortran은 Fortran 서브 루틴을 호출하지만, 여기서는 서브 루틴 이름에 C_을 사용하는 이유는 무엇입니까? 몇 가지 다른 서브 루틴 호출 예제를 통해 인터넷을 살펴 보았습니다. "stl"은 누군가대신 stl 대신 도와 주실 수 있습니까?R Fortran 서브 루틴 호출

z <- .Fortran(C_stl, x, n, 
      as.integer(period), 
      as.integer(s.window), 
      as.integer(t.window), 
      as.integer(l.window), 
      s.degree, t.degree, l.degree, 
      nsjump = as.integer(s.jump), 
      ntjump = as.integer(t.jump), 
      nljump = as.integer(l.jump), 
      ni = as.integer(inner), 
      no = as.integer(outer), 
      weights = double(n), 
      seasonal = double(n), 
      trend = double(n), 
      double((n+2*period)*5)) 
+1

서브 루틴은 'C_stl'로 불리지 않습니다. 'C_stl'은 Fortran 서브 루틴 이름을 문자로 포함하는 변수입니다. 따라서 서브 루틴'stl'을 호출하려면''stl "'을 사용하거나'C_stl <-"stl "'을 사용하고 변수'C_stl'을 사용하십시오. – Bhas

+1

@Bhas : 이해하고 있었지만, https://svn.r-project.org/R/trunk/src/library/stats/R/stl.R 링크의 코드를 보면 어떤 과제도 보지 못했습니다. 당신이 말했듯이,하지만 나는 긍정적 인 C_Stl https://svn.r-project.org/R/trunk/src/library/stats/src/stl.f에서 stl.f를 호출합니다. – kosa

+0

답을 모르지만 (1)'C_stl' [코드 한 곳에서만 나타납니다] (https://github.com/wch/r-source/search?q=C_stl&ref=cmdform) ; (2) 아마 [this] (https://github.com/wch/r-source/search?q=F77_SUB%28stl%29&type=Code)와 관련이 있습니까? –

답변

1

C_stl은 포트란 서브 루틴에 대한 보조 정보가 들어있는 stats 패키지의 객체입니다. 내보낼 수 없으므로 입력란에 stats:::C_stl을 입력해야합니다.

> stats:::C_stl 
$name 
[1] "stl" 

$address 
<pointer: 0x000000000f87b950> 
attr(,"class") 
[1] "RegisteredNativeSymbol" 

$dll 
DLL name: stats 
Filename: E:/apps/R/R-3.1.1/library/stats/libs/x64/stats.dll 
Dynamic lookup: FALSE 

$numParameters 
[1] 18 

attr(,"class") 
[1] "FortranRoutine" "NativeSymbolInfo" 
+0

나는 그것이 사실이라고 생각하지 않는다. 첫 번째 대답에서 언급했듯이 NAMESPACE 파일은 통계 라이브러리에있는 모든 C/Fortran 루틴의 이름 앞에 C_stl을 붙입니다. OP의 .Fortran이 C_stl과 함께 작동한다면'stats ::: C_stl'을 사용할 필요가 없습니다. 그리고'stats ::: C_stl' 구문은 R 구문을 가진 함수에서만 작동하지 않습니까? – Bhas

+0

'stl' 함수는'stats' 패키지의 환경에 있기 때문에'C_stl'을 어디에서 찾을 수 있는지 알고 있습니다. 이것이 일어나기 위해서는'C_stl'을 익스포트 할 필요가 없습니다. '.C' /'.Fortran'에 대한 일반적인 첫 번째 인수는 _string_입니다. 기본 R 배포본에 의해 제공되는 함수는 그보다 조금 엄격하고 대신 클래스 객체를 사용합니다. –

+0

나는이 대답에 더 기대고있다. 미안 해요 @Bhas, 당신은 많은 노력을 기울였습니다. 그러나이 대답은 더 정확합니다. – kosa

1

많은 검색을 한 후에 나는 대답을 찾았다 고 생각합니다. <path to R sources>/src/library/stats 디렉토리의 NAMESPACE 파일을보십시오.

모든 C/Fortran 루틴은 접두사가 C_ 인 접미사로 표시되며, 이는 useDynLib으로 끝난 것으로 보입니다.

관련 문제