Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »V minulém díle jsem pověděl něco o kreslení jednoduchých grafů a počítání jednoduchých stastistických funkcí. Jak ale člověk do GNU R dostane data z reálného světa, aniž by musel tato opisovat? Dneska popíšu načítání ze souboru.
GNU R má jakési data frames, což bych vzdáleně přirovnal k tabulce v libreoffice calc. Sloupce mohou být pojmenované, mít odlišné datové typy a některé buňky můžou být nevyplněné. Dají se také vybírat různé podmnožiny sloupců, tyto mazat, duplikovat, přemisťovat, přejmenovávat, ale i sčítat, dělit, počítat součet, průměr, atd.
K tomu abych něco předvedl budu muset nějaká data napřed vyrobit.
find /usr -maxdepth 1 -mindepth 1 -type d -exec du -sk "{}" ";" 2>/dev/null | tee r.txt
Po zavaření počítače a vypití kafe se nám objeví nějaká ta kýžená statistická data popisující reálný svět našeho harddisku:
204272 /usr/include 2828 /usr/local 1448 /usr/LessTif 4516 /usr/sbin 2405148 /usr/lib 1017824 /usr/share 132480 /usr/bin 52912 /usr/libexec 4 /usr/src 24 /usr/man
Na dostání dat do programu R používám nejčastěji funkci read.table. Zkusíme tedy, co se stane, když ji pustíme jen tak s minimálním parametrem:
> df=read.table("r.txt") > dfProměnnou jsem nazval df protože se jedná právě o ten zmíněný data frame. Vida! Ono nám to načetlo a dokonce to pojmenovalo sloupečky defaultním pojmenováním V1 a V2. Vidíme také, že v data framu jsou řádky číslované:
V1 V2 1 204272 /usr/include 2 2828 /usr/local 3 1448 /usr/LessTif 4 4516 /usr/sbin 5 2405148 /usr/lib 6 1017824 /usr/share 7 132480 /usr/bin 8 52912 /usr/libexec 9 4 /usr/src 10 24 /usr/man
Ani jsme nemuseli laborovat se separátorem sloupců! R má totiž defaultně nastavený přechod z nonblank na blank nebo tak nějak. Pokud bychom ho přeci jenom potřebovali změnit (CSV soubory oddělované čárkou a pod.), dělá se to parametrem sep (viz help(read.table)).
Funkci read.table používám v drtivé většině případů. Existují i další, jako readBin použitý v minulém díle, readChar, readLines. Viz vždy help() - parametr helpu se zadává bez uvozovek.
Když už jsme u těch CSV, tyto doporučuju jako metodu dostání dat z Libreoffice Calc do R. V Save As se nastaví formát CSV a odklepne spoustu různých potvrzovacích okýnek, z kterých mi vždycky tečou nervy. Pak musíme soubor zase uložit do normálního libreoffice formátu dat, jinak se bude libreoffice pokoušet ukládat pozdější změny do CSV a přijdeme možná o nějaká metadata.
Můžeme si teď třeba spočítat velikost těch adresářů v megabajtech místo kilobajtů? Ale jistě, udělá se to takhle:
> df$mega=df$V1/1000 > df V1 V2 mega 1 204272 /usr/include 204.272 2 2828 /usr/local 2.828 3 1448 /usr/LessTif 1.448 4 4516 /usr/sbin 4.516 5 2405148 /usr/lib 2405.148 6 1017824 /usr/share 1017.824 7 132480 /usr/bin 132.480 8 52912 /usr/libexec 52.912 9 4 /usr/src 0.004 10 24 /usr/man 0.024
Jak vidíme, R se nám nežinýroval přiřadit do sloupečku s neexistujícím jménem a tak se vytvořil sloupec nový.
A co si tak spočítat procenta? Na to budeme potřebovat funkci sum, která sečte vektor. Zdalipak bude fungovat i na sloupec data frame? Funguje!:
sum(df$mega) [1] 3821.456
Tak vypočteme další sloupec s procenty. Přitom se nám projeví jeden aspekt
gnu R - že když dělíme vektor jedním číslem (právě jsme viděli experimentální
důkaz toho, že součet sloupce je jedno číslo ), toto se automaticky
rozkopíruje na příslušný počet kopií:
> df$procenta=100*df$mega/sum(df$mega) > df V1 V2 mega procenta 1 204272 /usr/include 204.272 5.345397e+00 2 2828 /usr/local 2.828 7.400321e-02 3 1448 /usr/LessTif 1.448 3.789132e-02 4 4516 /usr/sbin 4.516 1.181749e-01 5 2405148 /usr/lib 2405.148 6.293800e+01 6 1017824 /usr/share 1017.824 2.663446e+01 7 132480 /usr/bin 132.480 3.466741e+00 8 52912 /usr/libexec 52.912 1.384603e+00 9 4 /usr/src 0.004 1.046721e-04 10 24 /usr/man 0.024 6.280329e-04
Bum! Počítače zase útočí (já bych všechny tyhle internety zakázala...!) Z vědeckého hlediska je tato odpověď jistě zcela korektní, nicméně podaří se nám ji upravit do humánně čitelné podoby? Vypadá to jakoby nás programátor R omilostnil a vybavil příkaz print parametrem digits (help(print)), který svádí k doměnce, že si s ním budeme moct nastavit zaokrouhlování:
> print(df,digits=5) V1 V2 mega procenta 1 204272 /usr/include 204.272 5.3454e+00 2 2828 /usr/local 2.828 7.4003e-02 3 1448 /usr/LessTif 1.448 3.7891e-02 4 4516 /usr/sbin 4.516 1.1817e-01 5 2405148 /usr/lib 2405.148 6.2938e+01 6 1017824 /usr/share 1017.824 2.6634e+01 7 132480 /usr/bin 132.480 3.4667e+00 8 52912 /usr/libexec 52.912 1.3846e+00 9 4 /usr/src 0.004 1.0467e-04 10 24 /usr/man 0.024 6.2803e-04
K této domněnce skutečně jen svádí. V help(print) žádný další vhodný parametr nenajdu. Podívám se tedy ještě do print.default. To je právě typické že funkce mají ještě .default v kterém se dají další věci nastavovat. Ale ani tam nic nenajdu. Jedna možnost se nabízí takto:
> df$procenta=round(df$procenta,2) > df V1 V2 mega procenta 1 204272 /usr/include 204.272 5.35 2 2828 /usr/local 2.828 0.07 3 1448 /usr/LessTif 1.448 0.04 4 4516 /usr/sbin 4.516 0.12 5 2405148 /usr/lib 2405.148 62.94 6 1017824 /usr/share 1017.824 26.63 7 132480 /usr/bin 132.480 3.47 8 52912 /usr/libexec 52.912 1.38 9 4 /usr/src 0.004 0.00 10 24 /usr/man 0.024 0.00
To má ale nevýhodu, že se nám tím zkazí ty data samotná, pokud je budeme chtít později použít, přijdeme o tisícinky. Zdá se mi že přehledný tisk čísýlek na obrazovku je téma na dizertační práci! Vytáhnu tedy řešení až úplně z paty:
> options(scipen=50) > print(df,digits=1) V1 V2 mega procenta 1 204272 /usr/include 204.272 5.3454 2 2828 /usr/local 2.828 0.0740 3 1448 /usr/LessTif 1.448 0.0379 4 4516 /usr/sbin 4.516 0.1182 5 2405148 /usr/lib 2405.148 62.9380 6 1017824 /usr/share 1017.824 26.6345 7 132480 /usr/bin 132.480 3.4667 8 52912 /usr/libexec 52.912 1.3846 9 4 /usr/src 0.004 0.0001 10 24 /usr/man 0.024 0.0006Podařilo se. Můžeme si teď v klidu zaletět do Stockholmu převzít Nobelovu cenu za tisk čísel. Mravní ponaučení co bych z toho dal je, že existuje v GNU R centrální příkaz options, který, jak píšou v jeho manuálové stránce, nastavuje "variety of global options which affect the way in which R computes and displays its results". Také je potřeba někdy kramařit v dalších manuálových stránkách odkazovaných v sekci See Also.
No a jak teď naše vydobydá data uložíme do externího souboru? Analogicky pomocí funkce write.table:
> write.table(df,file="out.txt")
Program nám texty opatřil uvozovkami, s čímž se ve světě CSV souborů často setkávám. Tyto uvozovky, separátor, popisky sloupečků a řádků a další se dají ve write.table zapínat a vypínat podle manuálové stránky.
Takto můžeme GNU R používat ve skriptech na matematiku, na kterou jsou expr a bc už těžkopádné. Musím vám jenom říct, jak se to volá v dávkovém režimu (sociálním? drogovém?). Program si napíšeme do souboru:
cat >program.R << "EOF" df=read.table("r.txt") procenta=100*df$V1/sum(df$V1) novy=data.frame(df$V2,procenta) write.table(novy,"out.txt",col.names=FALSE,quote=FALSE) EOF
A pak GNU R pustíme z příkazové řádky takto:
R --save <program.R
--save je parametr který se musí uvést a nastavuje se jím zda po skončení R prostředí uloží nebo neuloží (man R). Pokud nám program bouchne a měli jsme --save, můžeme rovnou pustit R a máme v něm pro ruční inspekci všechny proměnné ve stavu těsně před detonací. No a dnešní díl uzavřu výsledkem našeho experimentu, který je dále strojově zpracovatelný ve skriptech příkazy jako cut -d ' ':
cat out.txt 1 /usr/include 5.34539714705599 2 /usr/local 0.0740032071545505 3 /usr/LessTif 0.0378913168174643 4 /usr/sbin 0.118174852726291 5 /usr/lib 62.9380005945378 6 /usr/share 26.6344555583003 7 /usr/bin 3.46674147236027 8 /usr/libexec 1.38460314602602 9 /usr/src 0.000104672145904598 10 /usr/man 0.000628032875427586
Nástroje: Tisk bez diskuse
Tiskni
Sdílej: