Rプログラム eng_lang_setup.R は knit の紹介サイト https://yihui.org/knitr/ の engine.R を参考にして作成した.
source("eng_lang_setup.R")
## === knitr, reticulate, eng_lang are go. ===
x <- 1:5
x
## [1] 1 2 3 4 5
str(x)
## int [1:5] 1 2 3 4 5
$test = "jellow world";
$test =~ s/j/h/;
print $test
## hellow world
echo '
(linel:70)$ /* 行長を指定(コメント例) */
exp1 : (x+y)^2; /* 式の定義 */
exp2 : expand(exp1); /* 式exp1を展開 */
(display2d:false)$ /* 表示形式の変更 */
factor(exp2); /* 式exp2を因数分解 */
solve(x^2-2*x-1=0,x); /* 2次方程式の求解 */
solve([a*x+b*y=e,c*x+d*y=f],[x,y]); /* 連立方程式の求解 */
/* 作図例 */
plot2d([sin(x),cos(x)],[x,-2*%pi,2*%pi],
[gnuplot_term,png],[gnuplot_out_file,"eng_lang_setup_ex_files/fig-m1.png"]);
' > tmp_lang/tmp.mx
maxima -b tmp_lang/tmp.mx
## Maxima 5.42.2 http://maxima.sourceforge.net
## using Lisp GNU Common Lisp (GCL) GCL 2.6.12
## Distributed under the GNU Public License. See the file COPYING.
## Dedicated to the memory of William Schelter.
## The function bug_report() provides bug reporting information.
## (%i1) batch("tmp_lang/tmp.mx")
##
## read and interpret file: #p/var/www/html/LANG/tmp_lang/tmp.mx
## (%i2) linel:70
## (%i3) exp1:(x+y)^2
## 2
## (%o3) (y + x)
## (%i4) exp2:expand(exp1)
## 2 2
## (%o4) y + 2 x y + x
## (%i5) display2d:false
## (%i6) factor(exp2)
## (%o6) (y+x)^2
## (%i7) solve(x^2-2*x-1 = 0,x)
## (%o7) [x = 1-sqrt(2),x = sqrt(2)+1]
## (%i8) solve([a*x+b*y = e,c*x+d*y = f],[x,y])
## (%o8) [[x = -(d*e-b*f)/(b*c-a*d),y = (c*e-a*f)/(b*c-a*d)]]
## (%i9) plot2d([sin(x),cos(x)],[x,(-2)*%pi,2*%pi],[gnuplot_term,png],
## [gnuplot_out_file,"eng_lang_setup_ex_files/fig-m1.png"])
## (%o9) ["/tmp/maxout1363.gnuplot_pipes",
## "eng_lang_setup_ex_files/fig-m1.png"]
## (%o9) "tmp_lang/tmp.mx"
図1. eng_lang_setup_ex_files/fig-m1.png
a = 7
print(a)
## 7
py$a
## [1] 7
チャンクの記法
{lang ラベル, ext="f", stdin="tmp_lang/data.in", eval=TRUE, echo=TRUE, ...}
作業ディレクトリ tmp_lang/ において,ファイル ラベル.f(ファイル拡張子はextで指定する) を作成し, FORTRANソースコードとして コンパイル&実行 を行う. 実行時に,入力要求されるデータは stdin で指定されたファイルから読み込まれる. つづく引数 eval=TRUE, echo=TRUE, … はRMarkDownで用意されている引数である.
拡張子ext に指定できる計算機言語としては以下が用意されている.
bash -> bash, c -> c, f -> FORTRAN, f95 -> FORTRAN95, mx|mac -> Maxima
pas -> Pascal, perl -> Perl, py -> Python, py3 -> Python3,
r|R -> R, sh -> sh, in|data -> データ入力
sage -> sage, sagem -> sage -maxima, sagep -> sage -python, sager -> sage -R
extは省略不可の引数である. ラベルは省略するとknitrによってunnamed-chunk-??といったチャンク名が割り振られるが,作業ディレクトリ内ではunnamed-は省略したファイルを生成する. 引数stdinは不用な場合は省略できる. ラベルを省略するときは
{lang , ext="f", eval=TRUE, echo=TRUE, comment="##", ...} # lang の後のカンマを忘れないこと
とする.
a = 7
print(a)
## /home/inoue/bin/go tmp_lang/chunk-6.py > tmp_lang/chunk-6.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-6.py
## 7
py$a
## /home/inoue/bin/go tmp_lang/chunk-7.r > tmp_lang/chunk-7.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-7.r
## > py$a
## エラー: オブジェクト 'py' がありません
## 実行が停止されました
py$a
## [1] 7
追加されたエンジン lang では “pythonとRの連携”は機能しない.しかしながら幸いにして lang を追加しても標準エンジン {r, engine=“R”} が使用できるので一応はセーフとする.
date
ls *.csv
## /home/inoue/bin/go tmp_lang/chunk-9.bash > tmp_lang/chunk-9.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-9.bash
## 2020年 4月 13日 月曜日 08:18:42 JST
## flights.csv
$test = "jellow world";
$test =~ s/j/h/;
print $test
## /home/inoue/bin/go tmp_lang/chunk-10.perl > tmp_lang/chunk-10.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-10.perl
## hellow world
import pandas
flights = pandas.read_csv("flights.csv")
flights = flights[flights['dest'] == "ORD"]
flights = flights[['carrier', 'dep_delay', 'arr_delay']]
flights = flights.dropna()
print flights.head(3)
print flights.tail(3)
flights
## /home/inoue/bin/go tmp_lang/chunk-11.py > tmp_lang/chunk-11.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-11.py
## carrier dep_delay arr_delay
## 4 UA -4.0 12.0
## 5 AA -2.0 8.0
## 22 AA -1.0 14.0
## carrier dep_delay arr_delay
## 160714 AA -12.0 -37.0
## 160725 UA -7.0 -13.0
## 160741 AA -13.0 -38.0
# python3
# coding: utf-8
for j in range(1,8):
print('ひつじが'+str(j)+'匹')
## /home/inoue/bin/go tmp_lang/chunk-12.py3 > tmp_lang/chunk-12.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-12.py3
## ひつじが1匹
## ひつじが2匹
## ひつじが3匹
## ひつじが4匹
## ひつじが5匹
## ひつじが6匹
## ひつじが7匹
5
11 12 13 14 15
## /home/inoue/bin/go tmp_lang/tmp.in > tmp_lang/tmp.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/tmp.in
## Input Data File: /var/www/html/LANG/tmp_lang/tmp.in
## 5
## 11 12 13 14 15
c------program stat1f : av and sd
program stat1f
parameter (nmax=100)
dimension x(nmax)
write(6,*)"?-<n : # of data> ="
c ファイルの読み込み(status="old"),書き込み(status="replace")
c open(5,file="/tmp/lang/tmp.in",status="old",err=999)
read(5,*) n
if (n > nmax) then
write(6,*)"Error: n > nmax"
stop
end if
write(6,*)"?-<data: x(i),i=1,n> ="
read(5,*)(x(i),i=1,n)
write(6,*)"n =",n
write(6,*)"{x(i),i=1,n}",(x(i),i=1,n)
sum = 0.0
do 100 i=1,n
sum = sum + x(i)
100 continue
av = sum/n
sum = 0.0
do 200 i=1,n
sum = sum + (x(i)-av)**2
200 continue
var = sum/n; sd = sqrt(var)
write(6,*)" av = ",av,
1 " , var = ", var, " , sd = ",sd
stop
999 write(6,*)"Error in file-open"
end
## /home/inoue/bin/go tmp_lang/chunk-13.f < tmp_lang/tmp.in > tmp_lang/chunk-13.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-13.f
## Compile: gfortran chunk-13.f -o chunk-13 > chunk-13.log 2>&1 || err=1
## Execute: ./chunk-13
## ?-<n : # of data> =
## ?-<data: x(i),i=1,n> =
## n = 5
## {x(i),i=1,n} 11.0000000 12.0000000 13.0000000 14.0000000 15.0000000
## av = 13.0000000 , var = 2.00000000 , sd = 1.41421354
{======================================================
stat1p : av, var, sd
======================================================}
program stat1p;
const nmax=100; pmax=10;
type vecr = array[1..nmax] of real;
var i,n : integer;
sum, av, var0, sd : real;
x : vecr;
begin { of stat1p}
writeln('run : stat1p.pas');
write('?-<n : # of data> = '); readln(n);
writeln('?-<x[i], i=1,n> =');
for i:=1 to n do read(x[i]);
sum := 0.0;
for i:=1 to n do begin
sum := sum + x[i];
end;
av := sum/n;
sum := 0.0;
for i:=1 to n do begin
sum := sum + (x[i]-av)*(x[i]-av);
end;
var0 := sum/n;
sd := sqrt(var0);
writeln('n =',n:4,' ,av = ',av:8:3, ' , var0 = ',var0:8:3, ' , sd = ',sd:8:3);
end. {of stat1p}
## /home/inoue/bin/go tmp_lang/chunk-14.pas < tmp_lang/tmp.in > tmp_lang/chunk-14.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-14.pas
## Complie & Execute: fpc -Tlinux /var/www/html/LANG/tmp_lang/chunk-14.pas ; /var/www/html/LANG/tmp_lang/chunk-14
## Free Pascal Compiler version 3.0.4+dfsg-18ubuntu2 [2018/08/29] for x86_64
## Copyright (c) 1993-2017 by Florian Klaempfl and others
## Target OS: Linux for x86-64
## Compiling /var/www/html/LANG/tmp_lang/chunk-14.pas
## Linking /var/www/html/LANG/tmp_lang/chunk-14
## /usr/bin/ld.bfd: 警告: link.res には出力セクションが含まれます。-T オプションを忘れていませんか?
## 27 lines compiled, 0.1 sec
## run : stat1p.pas
## ?-<n : # of data> = ?-<x[i], i=1,n> =
## n = 5 ,av = 13.000 , var0 = 2.000 , sd = 1.414
/* stat1c : av & sd for one dimension 1994-08-02 by T.INOUE */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define NMAX 100
int main()
{
int i, n;
float av, var, sd, x[NMAX+1];
printf(" ?-<n : # of data> = "); scanf("%d",&n);
if (n > NMAX) exit(1);
printf(" ?-<x[i], i=1,n> =");
for (i=1; i<=n; ++i)
{ scanf("%f",&x[i]);}
av = 0.0;
for (i=1; i<=n; ++i) {av = av + x[i];} av = av / n;
var = 0.0;
for (i=1; i<=n; ++i) {var = var + (x[i]-av)*(x[i]-av);} var = var / n;
sd = sqrt(var);
printf("\n AV. = %f Var. = %f S.D. = %f \n", av, var, sd);
}
## /home/inoue/bin/go tmp_lang/chunk-15.c < tmp_lang/tmp.in > tmp_lang/chunk-15.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-15.c
## Compile & Execute: gcc -std=c90 /var/www/html/LANG/tmp_lang/chunk-15.c -lm -o /var/www/html/LANG/tmp_lang/chunk-15; /var/www/html/LANG/tmp_lang/chunk-15
## ?-<n : # of data> = ?-<x[i], i=1,n> =
## AV. = 13.000000 Var. = 2.000000 S.D. = 1.414214
x <- c(11,12,13,14,15) # データ
mean(x) # 平均
var(x) # 分散(不偏分散)
n <- length(x); var0 <- var(x)*(n-1)/n; var0
sd(x) # 標準偏差
sd0 <- sqrt(var0); sd0
png("eng_lang_setup_ex_files/fig1.png")
hist(x) # 作図は自動生成されない(前後の2行で手動指定する)
dev.off()
## /home/inoue/bin/go tmp_lang/chunk-16.r > tmp_lang/chunk-16.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-16.r
## > x <- c(11,12,13,14,15) # データ
## > mean(x) # 平均
## [1] 13
## > var(x) # 分散(不偏分散)
## [1] 2.5
## > n <- length(x); var0 <- var(x)*(n-1)/n; var0
## [1] 2
## > sd(x) # 標準偏差
## [1] 1.581139
## > sd0 <- sqrt(var0); sd0
## [1] 1.414214
## > png("eng_lang_setup_ex_files/fig1.png")
## > hist(x) # 作図は自動生成されない(前後の2行で手動指定する)
## > dev.off()
## null device
## 1
## >
x <- c(11,12,13,14,15) # データ
mean(x) # 平均
## [1] 13
var(x) # 分散(不偏分散)
## [1] 2.5
n <- length(x); var0 <- var(x)*(n-1)/n; var0
## [1] 2
sd(x) # 標準偏差
## [1] 1.581139
sd0 <- sqrt(var0); sd0
## [1] 1.414214
hist(x) # 作図は自動生成される
(linel:70)$ /* 行長を指定(コメント例) */
exp1 : (x+y)^2; /* 式の定義 */
exp2 : expand(exp1); /* 式exp1を展開 */
(display2d:false)$ /* 表示形式の変更 */
factor(exp2); /* 式exp2を因数分解 */
solve(x^2-2*x-1=0,x); /* 2次方程式の求解 */
solve([a*x+b*y=e,c*x+d*y=f],[x,y]); /* 連立方程式の求解 */
/* 作図例 */
plot2d([sin(x),cos(x)],[x,-2*%pi,2*%pi],
[gnuplot_term,png],[gnuplot_out_file,"eng_lang_setup_ex_files/fig2.png"]);
## /home/inoue/bin/go tmp_lang/chunk-18.mx > tmp_lang/chunk-18.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-18.mx
## batch("/var/www/html/LANG/tmp_lang/chunk-18.mx")
## read and interpret file: #<input stream #p/var/www/html/LANG/tmp_lang/chunk-18.mx>
## linel:70
## exp1:(x+y)^2
## 2
## (y + x)
## exp2:expand(exp1)
## 2 2
## y + 2 x y + x
## display2d:false
## factor(exp2)
## (y+x)^2
## solve(x^2-2*x-1 = 0,x)
## [x = 1-sqrt(2),x = sqrt(2)+1]
## solve([a*x+b*y = e,c*x+d*y = f],[x,y])
## [[x = -(d*e-b*f)/(b*c-a*d),y = (c*e-a*f)/(b*c-a*d)]]
## plot2d([sin(x),cos(x)],[x,(-2)*%pi,2*%pi],[gnuplot_term,png],
## [gnuplot_out_file,"eng_lang_setup_ex_files/fig2.png"])
## ["/tmp/maxout1707.gnuplot_pipes","eng_lang_setup_ex_files/fig2.png"]
## "/var/www/html/LANG/tmp_lang/chunk-18.mx"
図2. fig2.png
(load(draw), display2d:false, linel:70)$
f : expand((x-1)*(x-3)*(x-6))$
for i:1 thru 3 do ( define(t[i](x,x0), taylor(f,x,x0,i)) );
g1 : gr2d(xrange = [0,6.5], yrange = [-10, 10], grid=true,
font="Arial", font_size=24,
title="x0 = 2",
color=red, key="f(x)", explicit(f, x, 0, 6.5),
color=blue,key="f1(x)",explicit(t[1](x,2), x, 0, 6.5),
color=green,key="f2(x)",explicit(t[2](x,2),x,0,6.5) )$
g2 : gr2d(xrange = [0,6.5], yrange = [-10, 10], grid=true,
title="x0=3",
color=red, key="f(x)", explicit(f, x, 0, 6.5),
color=blue,key="f1(x)",explicit(t[1](x,3), x, 0, 6.5),
color=green,key="f2(x)",explicit(t[2](x,3),x,0,6.5) )$
draw(terminal=png, file_name="eng_lang_setup_ex_files/fig3",columns=2,
dimensions=[1000,400], g1,g2)$
## /home/inoue/bin/go tmp_lang/chunk-19.mx > tmp_lang/chunk-19.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-19.mx
## batch("/var/www/html/LANG/tmp_lang/chunk-19.mx")
## read and interpret file: #<input stream #p/var/www/html/LANG/tmp_lang/chunk-19.mx>
## (load(draw),display2d:false,linel:70)
## f:expand((x-1)*(x-3)*(x-6))
## for i thru 3 do define(t[i](x,x0),taylor(f,x,x0,i))
## done
## g1:gr2d(xrange = [0,6.5],yrange = [-10,10],grid = true,
## font = "Arial",font_size = 24,title = "x0 = 2",color = red,
## key = "f(x)",explicit(f,x,0,6.5),color = blue,key = "f1(x)",
## explicit(t[1](x,2),x,0,6.5),color = green,key = "f2(x)",
## explicit(t[2](x,2),x,0,6.5))
## g2:gr2d(xrange = [0,6.5],yrange = [-10,10],grid = true,
## title = "x0=3",color = red,key = "f(x)",explicit(f,x,0,6.5),
## color = blue,key = "f1(x)",explicit(t[1](x,3),x,0,6.5),
## color = green,key = "f2(x)",explicit(t[2](x,3),x,0,6.5))
## draw(terminal = png,file_name = "eng_lang_setup_ex_files/fig3",
## columns = 2,dimensions = [1000,400],g1,g2)
## "/var/www/html/LANG/tmp_lang/chunk-19.mx"
図3. fig3.png
a = factor(2014)
print a
pi
print n(pi)
print n(pi,digits=30)
print (1+2*I)^2
fig1 = plot(sin(x),(x,-pi,pi))
#show(fig1)
fig1.save('eng_lang_setup_ex_files/fig-s1.png')
## /home/inoue/bin/go tmp_lang/chunk-20.sage > tmp_lang/chunk-20.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-20.sage
## 2 * 19 * 53
## 3.14159265358979
## 3.14159265358979323846264338328
## 4*I - 3
exp : (x+y)^3;
expand(exp);
taylor(sin(x),x,0,7);
## /home/inoue/bin/go tmp_lang/chunk-21.sagem > tmp_lang/chunk-21.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-21.sagem
## ;;; Loading #P"/usr/lib/ecl-16.1.2/sb-bsd-sockets.fas"
## ;;; Loading #P"/usr/lib/ecl-16.1.2/sockets.fas"
## ;;; Loading #P"/usr/lib/ecl-16.1.2/defsystem.fas"
## ;;; Loading #P"/usr/lib/ecl-16.1.2/cmp.fas"
## Maxima 5.39.0 http://maxima.sourceforge.net
## using Lisp ECL 16.1.2
## Distributed under the GNU Public License. See the file COPYING.
## Dedicated to the memory of William Schelter.
## The function bug_report() provides bug reporting information.
## (%i1)
## 3
## (%o1) (y + x)
## (%i2)
## 3 2 2 3
## (%o2) y + 3 x y + 3 x y + x
## (%i3)
## 3 5 7
## x x x
## (%o3)/T/ x - -- + --- - ---- + . . .
## 6 120 5040
## (%i4)
import pandas
flights = pandas.read_csv("flights.csv")
flights = flights[flights['dest'] == "ORD"]
flights = flights[['carrier', 'dep_delay', 'arr_delay']]
flights = flights.dropna()
print flights.head(3)
print flights.tail(3)
flights
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.cos(2*np.pi*t)
#print t.head(3)
#print s.head(3)
plt.plot(t, s)
plt.xlabel('times (s)')
plt.ylabel('voltage (mV)')
plt.grid(True)
plt.savefig("eng_lang_setup_ex_files/py1.png")
#plt.show()
## /home/inoue/bin/go tmp_lang/chunk-22.sagep > tmp_lang/chunk-22.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-22.sagep
## carrier dep_delay arr_delay
## 4 UA -4.0 12.0
## 5 AA -2.0 8.0
## 22 AA -1.0 14.0
## carrier dep_delay arr_delay
## 160714 AA -12.0 -37.0
## 160725 UA -7.0 -13.0
## 160741 AA -13.0 -38.0
x <- 1:5
x
length(x)
str(x)
## /home/inoue/bin/go tmp_lang/chunk-23.sager > tmp_lang/chunk-23.out 2>&1
## Compile & Execute : /var/www/html/LANG/tmp_lang/chunk-23.sager
## > x <- 1:5
## > x
## [1] 1 2 3 4 5
## > length(x)
## [1] 5
## > str(x)
## int [1:5] 1 2 3 4 5
## >
cat eng_lang_setup.R
# 言語エンジンeng_langの環境設定
#' A lang engine for knitr
#' @param options knitr options
#' @export
#' @examples \dontrun{
#' ## Add this to your document
#' library(knitr)
#' knit_engines$set(lang = eng_lang)
#' opts_chunk$set("engine" = "lang")
#' opts_chunk$set("echo" = FALSE)
#' }
### define functions : strsplit_vec, vec2str, gsub_rep
strsplit_vec <- function(x,sep,fixed=TRUE,debug=TRUE){
# example : strsplit_vec("ex1.f",".") -> c("ex1", "f")
out <- unlist(strsplit(x,sep,fixed=TRUE))
cat("** strsplit_vec : ");str(out);#cat("\n")
out
}
vec2str <- function(vec,cutsep=", ",debug=TRUE){
# example : vec2str(c("a","b","c")) -> "abc"
out <- toString(vec)
out <- gsub(cutsep,"",out)
if (debug) {cat("** vec2str :"); str(out)}
out
}
gsub_rep <- function(exp, strlist, debug=TRUE){
# example : gsub_rep(ext, list(c("ext=",""),c('"',''),c(" ",""))) # 連続置換
if (debug) {cat("** gsub_rep : inputed exp = "); str(exp)}
for (i in seq(along=strlist)){
from <- strlist[[i]][1]
to <- strlist[[i]][2]
exp <- gsub(from, to, exp)
}
if (debug) {cat("** gsub_rep : "); str(exp)}
exp
}
#=== eng_lang ============================================================
# {lang ラベル, ext="f", stdin="./tmp_lang/data.in", eval=TRUE, echo=TRUE, ...}
# {lang , ext="mx", eval=TRUE, echo=TRUE, ...}
eng_lang <- function(options) {
cat("*** ====== enter eng_lang ====== ***\n")
debug <- FALSE
engine <- options$engine
eval <- options$eval
params.src <- options$params.src # 単なる文字列
cmd <- if(is.null(options$engine.path)) engine else options$engine.path
if (debug && (chunk_no==0) ) {cat("str(options)=\n"); print(str(options))}
if (eval) {
chunk_no <<- chunk_no + 1
#if (options$echo == FALSE) options$echo <- TRUE # 重要 #
cat("*** cmd = ");print(cmd)
cat("*** engine = ",options$engine, "\n")
cat("*** options$label = ",options$label, "\n")
cat("*** options$params.src = ",options$params.src,"\n") # 文字列
# cat("+++ str(options$params.src) : ",str(options$params.src),"\n") #文字列
if (debug) {cat("*** options$code = \n"); print(options$code); cat("\n")}
# ext, stdin を抽出
w1 <- strsplit_vec(options$params.src,",")
ext <- grep("ext=",w1,value=TRUE)
ext <- gsub_rep(ext, list(c("ext=",""),c('"',''),c(" ",""))) # 連続置換
cat("** ext = ",ext,"\n")
stdin <- grep("stdin=",w1,value=TRUE)
stdin <- gsub_rep(stdin, list(c("stdin=",""),c('"',''),c(" ",""))) # 連続置換
cat("** stdin = ",stdin,"\n")
if (length(stdin) > 0) stdin <- paste(" < ",stdin,sep="")
cat("** stdin = ",stdin,"\n")
# チャンクラベル options$label から sname, label を生成
sname <- options$label
sname <- gsub("unnamed-","",sname)
label <- paste(sname,".",ext,sep="")
cat("+++ label = ",label,", sname = ", sname, ", ext = ", ext,"\n")
# 言語実行結果の出力ファイル名: ./tmp_lang/ラベル名.out
outfilename <- paste("tmp_lang/", sname, ".out", sep="")
cat("+++ outfilename = ",outfilename,"\n")
# 作業ディレクトリ/tmp/langの準備, ソースコードファイル scodefile の準備
if (file.exists("tmp_lang") != TRUE) dir.create("tmp_lang")
scodefile <- paste("tmp_lang/",label,sep="")
cat("*** scodefile = ",scodefile,"\n")
write(options$code,file=scodefile) # code のファイルへの書き込み
if (debug) file.show(scodefile, header="*** source code ***")
# パイプを使って実行コマンド mycmd を生成
mycmd <- paste("/home/inoue/bin/go ", scodefile, " ", stdin,
" > ", outfilename, " 2>&1",sep="")
cat("*** mycmd = ",mycmd,"\n")
system(mycmd) # コマンドの実行
# 結果ファイルの取り込み
out <- scan(outfilename,what="list",sep="\n")
out <- c(mycmd,out)
} else { out <- "*** eval = FALSE ***"} # end of if-eval
if (debug) file.show(outfilename,header="*** output ***")
err <- grep("Error:",out)
if (length(err)>0) {cat("---> Error in Chunk & Halt\n"); q() }
### skip end ###########################################################
#options(knitr.duplicate.label = 'allow') # チャンク名の重複を許す
knitr::engine_output(options, options$code, out)
} # end of eng_lang
#=== main ==============================================================
library(knitr) # ライブラリ knitr の呼び出し
library(reticulate) # ライブラリ reticulate の呼び出し
names(knit_engines$get()) # kinitr の エンジン名一覧の表示
names(opts_chunk$get()) # チャンクオプション一覧の表示
#options(knitr.duplicate.label = 'allow') # チャンク名の重複を許す
##### memo
if (0) {
cat("bash---\n")
knit_engines$get("bash") # エンジン名fortranの処理関数の内容を表示
cat("fortran---\n")
knit_engines$get("fortran") # エンジン名fortranの処理関数の内容を表示
cat("perl---\n")
knit_engines$get("perl") # エンジン名perlの処理関数の内容を表示
cat("python---\n")
knit_engines$get("python") # エンジン名pythonの処理関数の内容を表示
}
#--- main setup
chunk_no <- 0 # チャンク番号のリセット
chunk_name <- "chunk-" # 無名チャンク名のときのチャンク名
unlink("tmp_lang/*") # 作業ディレクトリ内のファイルの除去
knit_engines$set(lang = eng_lang) # エンジン名langの処理を関数eng_langで指定
opts_chunk$set("engine" = "lang") # エンジン名langをエンジンに追加する
#opts_chunk$set("echo" = TRUE) # チャンクオプションの初期設定
names(knit_engines$get()) # エンジン一覧(langが追加されていることを確認)
#names(opts_chunk$get())
options(knitr.duplicate.label = 'allow') # チャンク名の重複を許す
cat("=== knitr, reticulate, eng_lang are go. ===\n")
cat ~/bin/go
#! /bin/sh
#========================================='94-02-17 by Takakatsu INOUE
#case $# in
# 0 ) echo "Usage: $0 [file-name|@]"; exit;;
#esac
p2=$2; p3=$3; p4=$4; p5=$5; p6=$6
CMD="$0 $*"
case $1 in
"" ) infile=`cat $HOME/.env/.now`
set `fna $infile` > /dev/null
fullname=$1; dir=$2; fname=$3; sname=$4; ext=$5
;;
* ) if test -f $1 ; then
set `fna $1` > /dev/null
fullname=$1; dir=$2; fname=$3; sname=$4; ext=$5
echo $fullname > $HOME/.env/.now
else
echo "File $1 is not exsist" ; exit ;
fi
;;
esac
######################## TeX type (.tex | .Rnw) #######################
err=0
texdir="/usr/local/texlive/2017/bin/x86_64-linux/"
case $ext in
"tex"|"Rnw")
if test -f ${fullname}; then
textype="platex -shell-escape -interaction=nonstopmode "
grep '^\\documentclass\[uplatex' ${fullname}
if [ $? -eq 0 ] ; then # 0:found, 1:not found, 2:error
textype="uplatex -shell-escape -interaction=nonstopmode "
fi
grep '^\\documentclass.*ltjarticle' ${fullname}
if [ $? -eq 0 ] ; then # 0:found, 1:not found, 2:error
textype="lualatex -shell-escape -interaction=nonstopmode "
fi
fi
### papaertype ###
papertype="a4"
grep '^\\document.*a4' ${fullname} # 0:found, 1:not found, 2:error
if [ $? -eq 0 ]; then papertype="a4"; fi
grep '^\\document.*a5' ${fullname}
if [ $? -eq 0 ]; then papertype="a5" ; fi
grep '^\\document.*b4' ${fullname}
if [ $? -eq 0 ]; then papertype="b4" ; fi
grep '^\\document.*b5' ${fullname}
if [ $? -eq 0 ]; then papertype="b5" ; fi
grep 'hagaki' ${fullname}
if [ $? -eq 0 ]; then papertype="a6"; fi
### dvi2type ###
dvi2type="${texdir}dvips" # psfrag機能使用の場合
grep '^\\usepackage.*dvipdfmx' ${fullname}
if [ $? -eq 0 ]; then dvi2type="${texdir}dvipdfmx"; fi
grep '^\\documentclass.*ltjarticle' ${fullname}
if [ $? -eq 0 ] ; then dvi2type="echo"; fi
;;
esac
################################################
#echo "CMD : $CMD "
#echo "$0 $*"
echo "Compile & Execute : $fullname "
err=0
#echo "fullnmae= $fullname dir=$dir fname=$fname sname=$sname ext=$ext"
# /home/inoue/a.tex -> dir:/home/inoue, fname:a.tex, sname:a, ext:tex
case $ext in
c ) echo "Compile & Execute: gcc -std=c90 $fullname -lm -o $dir/$sname; $dir/$sname";
gcc -std=c90 $fullname -lm -o $dir/$sname; $dir/$sname ;;
html) firefox -new-window $fullname ;;
tex ) echo "--- textype : ${textype}"
echo "--- papertype : ${papertype}"
echo "--- dvi2type : ${dvi2type}"
case ${dvi2type} in
# *"dvipdfmx"*) papertype="-p ${papertype}";;
*"dvipdfmx"*) papertype="";;
*"dvips"*) papertype="-t ${papertype}";;
esac
set -x
${textype} ${dir}/${sname}.tex > /tmp/tmp-tex.log 2>&1;
${dvi2type} ${papertype} ${dir}/${sname}.dvi > /tmp/tmp-dvi.log 2>&1 ;
set +x
case ${dvi2type} in
*"dvips") echo "${texdir}ps2pdf ${dir}/${sname}.ps"
${texdir}ps2pdf ${dir}/${sname}.ps > /tmp/tmp-ps2pdf.log 2>&1 ;;
"echo") echo "tex -> pdf type";;
* ) exit;;
esac
echo "textype : $textype";
echo "---> evince ${dir}/${sname}.pdf" ;;
sh ) sh $fullname ;;
bash ) bash $fullname ;;
csh ) csh $fullname ;;
p|pas ) echo "Complie & Execute: fpc -Tlinux $fullname ; $dir/$sname";
fpc -Tlinux $fullname ; $dir/$sname ;;
perl ) perl $fullname;;
m ) math $fullname < $sname;;
mx ) maxima --very-quiet -b $fullname ;;
# mx ) maxima -b $fullname ;;
wxm ) maxima --very-quiet -b $fullname ;;
py ) python $fullname ;;
py3 ) python3 $fullname ;;
sage ) sage $fullname ;;
sagem ) cat $fullname | sage -maxima [--very-quit] ;;
sager ) cat $fullname | sage -R --no-init-file --vanilla --silent ;;
sagep ) cat $fullname | sage -python ;;
dmk ) cd ${dir}; dmk $fname tex a4 ;;
Rmd ) cd ${dir}; rmd $fname $p2 $p3 $p4 ;;
md ) cd ${dir}; rmd $fname $p2 $p3 $p4 ;;
r|R ) R --no-init-file --vanilla --silent < $fullname;;
# f ) gfortran $fullname -o $sname; $dir/$sname ;;
f ) cd ${dir};
echo "Compile: gfortran ${fname} -o ${sname} > ${sname}.log 2>&1 || err=1";
gfortran ${fname} -o ${sname} > ${sname}.log 2>&1 || err=1;
case $err in
1) cat ${sname}.log; exit ;;
esac
echo "Execute: ./${sname} $p2 $p3 $p4 $p5 $p6 ";
./${sname} $p2 $p3 $p4 $p5 $p6 ;;
in|data) echo "Input Data File: $fullname ";
cat $fullname ;;
dvi ) ${texdir}xdvi -geometry -0+0 $fullname ;;
Rnw ) echo "=== Rnw case ==="
echo "--- papertype : ${papertype}"
echo "--- dvi2type : ${dvi2type}"
echo "Run : /home/inoue/bin/R-Sweave ${fullname}"
RNW="${dir}/RNW"; mkdir ${RNW} > /dev/null 2>&1 || rm ${RNW}/* ;
cp ${fname} ${RNW}/; cd ${RNW}; # change working dir
/home/inoue/bin/R-Sweave ${fname} > /tmp/tmp-R.log 2>&1 || err=1;
case $err in
1) echo "---> Error in R-Sweave"; cat /tmp/tmp-R.log; exit 1;;
esac;
cp ${RNW}/${sname}.tex /tmp/tmp-tex.wrk ;
case ${dvi2type} in
*"dvipdfmx")
sed 's/\(-[0-9][0-9][0-9]\)}/\1.pdf}/' /tmp/tmp-tex.wrk > ${RNW}/${sname}.tex ;;
esac
echo "Run : $textype ${RNW}/${sname}.tex";
${textype} ${RNW}/${sname}.tex > /tmp/tmp-Tex.log 2>&1 || err=2;
case $err in
2) echo "---> Error/Waring in Tex compile";
grep 'Output written on' /tmp/tmp-Tex.log || err=3;
case $err in
3) cat /tmp/tmp-Tex.log ; exit 3;;
esac;;
esac;
### dvi to {ps|pdf}
set +x
case $dvi2type in
*"dvipdf"* )
# echo "Run : dvipdfmx -p ${papertype} ${RNW}/${sname}.dvi";
# dvipdfmx -p ${papertype} ${RNW}/${sname}.dvi > /tmp/tmp-Dvipdf.log 2>&1
echo "Run : dvipdfmx ${RNW}/${sname}.dvi";
dvipdfmx ${RNW}/${sname}.dvi > /tmp/tmp-Dvipdf.log 2>&1 ;;
*"dvips"*)
echo "Run : /usr/bin/dvips -t ${papertype} ${RNW}/${sname}.dvi"
/usr/bin/dvips -t ${papertype} ${RNW}/${sname}.dvi > /tmp/tmp-dvi.log 2>&1
echo "Run : /usr/bin/ps2pdf ${RNW}/${sname}.ps"
/usr/bin/ps2pdf ${RNW}/${sname}.ps > /tmp/tmp-ps2pdf.log 2>&1 ;;
* ) exit;;
esac
echo "Run : cp ${RNW}/${sname}.pdf ${dir}/"
cp ${RNW}/${sname}.pdf ${dir}/
echo "---> evince ${dir}/${sname}.pdf" ;;
* ) echo "go : Not support compiler" ;;
esac
cat ~/bin/rmd
#!/bin/bash
#========================================='18-03-26 by Takakatsu INOUE
case $# in
0 ) echo "
=== Usage: $0 rmdfile ===
ex. $0 ex1.Rmd
$0 ex1.Rmd html_document
$0 ex1.Rmd ioslides_presentation
$0 ex1.Rmd all <--- YAML のすべてのoutput_formatを出力する
Rscript -e \"rmarkdown::rendar('ex1.Rmd'); browseURL('ex1.html')\"
---> ex1.Rmd を rmardown で処理し結果を ex.html に返す
注: \${f%.jpg} はファイル名から .jpg を除いた部分を返す.(Bashのブレース展開)
\${f%.*} はファイル名から任意の拡張子を除いた部分を返す.
input: ??.Rmd ??.md ??.R
output_format: 'all' 'html_document' 'pdf_document' 'beamer_presentation'
'ioslides_presentaion' 'md_document' 'word_document'
ex. html_document
html_document(toc=TRUE,thema=journal) <--- YALMと競合する
"
exit
;;
esac
p2=$2
p3=$3
case $1 in
"" ) infile=`cat $HOME/.env/.now`
set `fna $infile` > /dev/null
fullname=$1; dir=$2; fname=$3; sname=$4; ext=$5
;;
* ) if test -f $1 ; then
set `fna $1` > /dev/null
fullname=$1; dir=$2; fname=$3; sname=$4; ext=$5
echo $fullname > $HOME/.env/.now
else
echo "File $1 is not exsist" ; exit ;
fi
;;
esac
case ${ext} in
"Rmd"|"md"|"R") infile=${fullname};;
*) echo "---> ${ext} is Not {Rmd, md, R} and No Compile "; exit;;
esac
#infile=$1;
outform=",'html_document'";
htmlfile="${infile%.*}.html";
bURL="; browseURL('${htmlfile})')"
viewcmd="firefox -new-window ${htmlfile}"
case $p2 in
"html"*) outform=",'html_document'";
viewcmd="firefox -new-window ${htmlfile}" ;;
"pdf"*) outform=",'pdf_document'";
viewcmd="evince ${infile%.*}.pdf" ;;
"bea"*) outform=",'beamer_presentation'";
viewcmd="evince ${infile%.*}.pdf" ;;
"ios"*) outform=",'ioslides_presentation'";
viewcmd="firefox -new-window ${infile%.*}.html" ;;
"md"*) outform=",'md_document'";
viewcmd="less ${infile%.*}.md" ;;
"word"*|"doc"*) outform=",'word_document'";
viewcmd="lowriter ${infile%.*}.docx" ;;
"all") outform=",'all'";;
"" ) outform=",'html_document'";
viewcmd="firefox -new-window ${htmlfile}" ;;
esac
case $p3 in
"noview") viewcmd="echo 'noview'"::
esac
echo "---infile=${infile} "
echo "---outform=${outform}"
echo "---hmlfile=${htmlfile}"
echo "---viewcmd=${viewcmd}"
echo "Rscript -e \"rmarkdown::render('${infile}' ${outform})\""
err=0
Rscript -e "rmarkdown::render('${infile}' ${outform})" 2>&1 || err=1
case $err in
1) echo "** Error in rmarkdown and Halt ***"; exit;;
esac
#Rscript /home/inoue/Python/lang_err.r
#Rscript /home/inoue/bin/lang_err.r
Rscript ./eng_lang_err.R
if test -f ./tmp_lang/err; then
echo "== ~/bin/go -> ~/bin/rmd -> Rscript ~/bin/eng_lang_err.R : 判定:存在する =="
exit
fi
${viewcmd}
echo "Done Viewer by ${viewcmd}"
echo "Done: Rscript -e \"rmarkdown::render('${infile}' ${outform})\""
cat eng_lang_setup_ex.Rmd
---
title: "eng_lang_setup_ex.Rmd <br>: 計算機言語の実行記録の収集"
author: "INOUE Takakatsu 更新:`r Sys.Date()`"
output:
html_document:
keep_md: no
self_contained: no
toc: yes
toc_depth: 3
# theme: null
highlight: null
md_extensions: -ascii_identifiers
# lib_dir: TMPDIR
css: mystyle.css
includes:
# after_body: include_lightbox2.html
ioslides_presentation:
toc: yes
pdf_document:
latex_engine: lualatex
keep_tex: yes
toc: yes
word_document:
toc: yes
documentclass: ltjarticle
---
# 言語エンジンeng_langの環境設定
Rプログラム eng_lang_setup.R は knit の紹介サイト [https://yihui.org/knitr/](https://yihui.org/knitr/) の engine.R を参考にして作成した.
* {r, setup}
```{r, setup}
source("eng_lang_setup.R")
```
# 標準エンジンの使用例
### Rの実行
* {r, engine="R"}
```{r, engine="R"}
x <- 1:5
x
str(x)
```
### perlの実行
* {perl}
```{perl}
$test = "jellow world";
$test =~ s/j/h/;
print $test
```
### Maximaの実行
* {bash}
```{bash}
echo '
(linel:70)$ /* 行長を指定(コメント例) */
exp1 : (x+y)^2; /* 式の定義 */
exp2 : expand(exp1); /* 式exp1を展開 */
(display2d:false)$ /* 表示形式の変更 */
factor(exp2); /* 式exp2を因数分解 */
solve(x^2-2*x-1=0,x); /* 2次方程式の求解 */
solve([a*x+b*y=e,c*x+d*y=f],[x,y]); /* 連立方程式の求解 */
/* 作図例 */
plot2d([sin(x),cos(x)],[x,-2*%pi,2*%pi],
[gnuplot_term,png],[gnuplot_out_file,"eng_lang_setup_ex_files/fig-m1.png"]);
' > tmp_lang/tmp.mx
maxima -b tmp_lang/tmp.mx
```
<div align="center">
<img width="400" alt="写真" src="eng_lang_setup_ex_files/fig-m1.png"><br>
図1. eng_lang_setup_ex_files/fig-m1.png
</div>
## 標準エンジンを用いたpythonとRの連携
* {python}
```{python}
a = 7
print(a)
```
* {r, engine="R"}
```{r, engine="R"}
py$a
```
# 追加エンジン lang を使用
**チャンクの記法**
```
{lang ラベル, ext="f", stdin="tmp_lang/data.in", eval=TRUE, echo=TRUE, ...}
```
作業ディレクトリ tmp_lang/ において,ファイル **ラベル.f**(ファイル拡張子は**ext**で指定する) を作成し, FORTRANソースコードとして
コンパイル&実行 を行う. 実行時に,入力要求されるデータは **stdin** で指定されたファイルから読み込まれる. つづく引数 eval=TRUE, echo=TRUE, ... は**RMarkDown**で用意されている引数である.
拡張子ext に指定できる計算機言語としては以下が用意されている.
```
bash -> bash, c -> c, f -> FORTRAN, f95 -> FORTRAN95, mx|mac -> Maxima
pas -> Pascal, perl -> Perl, py -> Python, py3 -> Python3,
r|R -> R, sh -> sh, in|data -> データ入力
sage -> sage, sagem -> sage -maxima, sagep -> sage -python, sager -> sage -R
```
**ext**は省略不可の引数である.
ラベルは省略するとknitrによってunnamed-chunk-??といったチャンク名が割り振られるが,作業ディレクトリ内ではunnamed-は省略したファイルを生成する. 引数**stdin**は不用な場合は省略できる.
ラベルを省略するときは
```
{lang , ext="f", eval=TRUE, echo=TRUE, comment="##", ...} # lang の後のカンマを忘れないこと
```
とする.
## pythonとRの連携 (lang エンジンを使用して)
* {lang , ext="py"}
```{lang , ext="py"}
a = 7
print(a)
```
* {lang, ext="r"} **機能せず(open problem!!)**
```{lang, ext="r"}
py$a
```
* {r, engine="R"} **機能する**
```{r, engine="R"}
py$a
```
追加されたエンジン lang では "pythonとRの連携"は機能しない.しかしながら幸いにして lang を追加しても標準エンジン {r, engine="R"} が使用できるので一応はセーフとする.
## bash
* {lang , ext="bash"}
```{lang , ext="bash"}
date
ls *.csv
```
## Perl
* {lang, ext="perl"}
```{lang, ext="perl"}
$test = "jellow world";
$test =~ s/j/h/;
print $test
```
## Python (データファイル flights.csv を使用する)
* {lang ,ext="py", eval=TRUE, echo=TRUE}
```{lang ,ext="py", eval=TRUE, echo=TRUE}
import pandas
flights = pandas.read_csv("flights.csv")
flights = flights[flights['dest'] == "ORD"]
flights = flights[['carrier', 'dep_delay', 'arr_delay']]
flights = flights.dropna()
print flights.head(3)
print flights.tail(3)
flights
```
* {lang ,ext="py3", eval=TRUE, echo=TRUE}
```{lang ,ext="py3", eval=TRUE, echo=TRUE}
# python3
# coding: utf-8
for j in range(1,8):
print('ひつじが'+str(j)+'匹')
```
## Fortran
* データ {lang tmp, ext="in", eval=TRUE, echo=TRUE}
```{lang tmp, ext="in", eval=TRUE, echo=TRUE}
5
11 12 13 14 15
```
* プログラム {lang ,ext="f", stdin="tmp_lang/tmp.in" , echo=TRUE}
```{lang ,ext="f", stdin="tmp_lang/tmp.in" , echo=TRUE}
c------program stat1f : av and sd
program stat1f
parameter (nmax=100)
dimension x(nmax)
write(6,*)"?-<n : # of data> ="
c ファイルの読み込み(status="old"),書き込み(status="replace")
c open(5,file="/tmp/lang/tmp.in",status="old",err=999)
read(5,*) n
if (n > nmax) then
write(6,*)"Error: n > nmax"
stop
end if
write(6,*)"?-<data: x(i),i=1,n> ="
read(5,*)(x(i),i=1,n)
write(6,*)"n =",n
write(6,*)"{x(i),i=1,n}",(x(i),i=1,n)
sum = 0.0
do 100 i=1,n
sum = sum + x(i)
100 continue
av = sum/n
sum = 0.0
do 200 i=1,n
sum = sum + (x(i)-av)**2
200 continue
var = sum/n; sd = sqrt(var)
write(6,*)" av = ",av,
1 " , var = ", var, " , sd = ",sd
stop
999 write(6,*)"Error in file-open"
end
```
## Pascalの実行例
* {lang , ext="pas", stdin="tmp_lang/tmp.in", echo=TRUE}
```{lang , ext="pas", stdin="tmp_lang/tmp.in", echo=TRUE}
{======================================================
stat1p : av, var, sd
======================================================}
program stat1p;
const nmax=100; pmax=10;
type vecr = array[1..nmax] of real;
var i,n : integer;
sum, av, var0, sd : real;
x : vecr;
begin { of stat1p}
writeln('run : stat1p.pas');
write('?-<n : # of data> = '); readln(n);
writeln('?-<x[i], i=1,n> =');
for i:=1 to n do read(x[i]);
sum := 0.0;
for i:=1 to n do begin
sum := sum + x[i];
end;
av := sum/n;
sum := 0.0;
for i:=1 to n do begin
sum := sum + (x[i]-av)*(x[i]-av);
end;
var0 := sum/n;
sd := sqrt(var0);
writeln('n =',n:4,' ,av = ',av:8:3, ' , var0 = ',var0:8:3, ' , sd = ',sd:8:3);
end. {of stat1p}
```
## Cの実行例
* {lang , ext="c", stdin="tmp_lang/tmp.in", echo=TRUE}
```{lang , ext="c", stdin="tmp_lang/tmp.in", echo=TRUE}
/* stat1c : av & sd for one dimension 1994-08-02 by T.INOUE */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define NMAX 100
int main()
{
int i, n;
float av, var, sd, x[NMAX+1];
printf(" ?-<n : # of data> = "); scanf("%d",&n);
if (n > NMAX) exit(1);
printf(" ?-<x[i], i=1,n> =");
for (i=1; i<=n; ++i)
{ scanf("%f",&x[i]);}
av = 0.0;
for (i=1; i<=n; ++i) {av = av + x[i];} av = av / n;
var = 0.0;
for (i=1; i<=n; ++i) {var = var + (x[i]-av)*(x[i]-av);} var = var / n;
sd = sqrt(var);
printf("\n AV. = %f Var. = %f S.D. = %f \n", av, var, sd);
}
```
## Rの実行例
* {lang ,ext="r"}の場合
```{lang , ext="r"}
x <- c(11,12,13,14,15) # データ
mean(x) # 平均
var(x) # 分散(不偏分散)
n <- length(x); var0 <- var(x)*(n-1)/n; var0
sd(x) # 標準偏差
sd0 <- sqrt(var0); sd0
png("eng_lang_setup_ex_files/fig1.png")
hist(x) # 作図は自動生成されない(前後の2行で手動指定する)
dev.off()
```
![eng_lang_setup_ex_files/fig1.pngのグラフ](eng_lang_setup_ex_files/fig1.png)
* {r ,engine="R"}の場合
```{r , engine="R"}
x <- c(11,12,13,14,15) # データ
mean(x) # 平均
var(x) # 分散(不偏分散)
n <- length(x); var0 <- var(x)*(n-1)/n; var0
sd(x) # 標準偏差
sd0 <- sqrt(var0); sd0
hist(x) # 作図は自動生成される
```
## Maximaの実行例1
* {lang ,ext="mx" }
```{lang ,ext="mx" }
(linel:70)$ /* 行長を指定(コメント例) */
exp1 : (x+y)^2; /* 式の定義 */
exp2 : expand(exp1); /* 式exp1を展開 */
(display2d:false)$ /* 表示形式の変更 */
factor(exp2); /* 式exp2を因数分解 */
solve(x^2-2*x-1=0,x); /* 2次方程式の求解 */
solve([a*x+b*y=e,c*x+d*y=f],[x,y]); /* 連立方程式の求解 */
/* 作図例 */
plot2d([sin(x),cos(x)],[x,-2*%pi,2*%pi],
[gnuplot_term,png],[gnuplot_out_file,"eng_lang_setup_ex_files/fig2.png"]);
```
<div align="center">
<img width="400" alt="写真" src="eng_lang_setup_ex_files/fig2.png"><br>
図2. fig2.png
</div>
## Maximaの実行例2
* {lang, ext="mx"}
```{lang, ext="mx"}
(load(draw), display2d:false, linel:70)$
f : expand((x-1)*(x-3)*(x-6))$
for i:1 thru 3 do ( define(t[i](x,x0), taylor(f,x,x0,i)) );
g1 : gr2d(xrange = [0,6.5], yrange = [-10, 10], grid=true,
font="Arial", font_size=24,
title="x0 = 2",
color=red, key="f(x)", explicit(f, x, 0, 6.5),
color=blue,key="f1(x)",explicit(t[1](x,2), x, 0, 6.5),
color=green,key="f2(x)",explicit(t[2](x,2),x,0,6.5) )$
g2 : gr2d(xrange = [0,6.5], yrange = [-10, 10], grid=true,
title="x0=3",
color=red, key="f(x)", explicit(f, x, 0, 6.5),
color=blue,key="f1(x)",explicit(t[1](x,3), x, 0, 6.5),
color=green,key="f2(x)",explicit(t[2](x,3),x,0,6.5) )$
draw(terminal=png, file_name="eng_lang_setup_ex_files/fig3",columns=2,
dimensions=[1000,400], g1,g2)$
```
<div align="center">
<img width="800" alt="写真" src="eng_lang_setup_ex_files/fig3.png">
<br>図3. fig3.png
</div>
## sageの実行例1
* {lang , ext="sage"}
```{lang , ext="sage"}
a = factor(2014)
print a
pi
print n(pi)
print n(pi,digits=30)
print (1+2*I)^2
fig1 = plot(sin(x),(x,-pi,pi))
#show(fig1)
fig1.save('eng_lang_setup_ex_files/fig-s1.png')
```
![eng_lang_setup_ex_files/fig-s1.pngのグラフ](eng_lang_setup_ex_files/fig-s1.png){width="50%"}
## sagem : sage -maxima
* {lang , ext="sagem"}
```{lang , ext="sagem"}
exp : (x+y)^3;
expand(exp);
taylor(sin(x),x,0,7);
```
## sagep : sage -python (データファイル flights.csv を使用する)
* {lang , ext="sagep"}
```{lang , ext="sagep"}
import pandas
flights = pandas.read_csv("flights.csv")
flights = flights[flights['dest'] == "ORD"]
flights = flights[['carrier', 'dep_delay', 'arr_delay']]
flights = flights.dropna()
print flights.head(3)
print flights.tail(3)
flights
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.cos(2*np.pi*t)
#print t.head(3)
#print s.head(3)
plt.plot(t, s)
plt.xlabel('times (s)')
plt.ylabel('voltage (mV)')
plt.grid(True)
plt.savefig("eng_lang_setup_ex_files/py1.png")
#plt.show()
```
![eng_lang_setup_ex_files/py1.pngのグラフ](eng_lang_setup_ex_files/py1.png){width="50%"}
## sager : sage -R
* {lang ,ext="sager"}
```{lang ,ext="sager"}
x <- 1:5
x
length(x)
str(x)
```
# 付録
### eng_lang_setup.R のソース
* {bash, comment=""}
```{bash, comment=""}
cat eng_lang_setup.R
```
### シェルスクリプト ~/bin/go の内容
* {bash, comment=""}
```{bash, comment=""}
cat ~/bin/go
```
### シェルスクリプト ~/bin/rmd の内容(~/bin/go 内で使用される)
* {bash, comment=""}
```{bash, comment=""}
cat ~/bin/rmd
```
### eng_lang_setup_ex.Rmd の内容
* {bash, comment=""}
```{bash, comment=""}
cat eng_lang_setup_ex.Rmd
```
### eng_lang_setup_ex.Rmd を処理して eng_lang_setup_ex.html を作成する.
```
$ ~/bin/go eng_lang_setup_ex.Rmd
```
$ ~/bin/go eng_lang_setup_ex.Rmd