我无法理解二进制格式的性质及其在 R 中的用处,所以我做了一些实验:
在 R 中:
y1 = rbind(c('a', 'b'), c('c', 'd'))
write.table(y1, 'f1', quote=F, col.names=F, row.names=F)
conn = file('f2', 'wb')
writeBin('a b\nc d\n', conn)
close(conn)
Run Code Online (Sandbox Code Playgroud)
在 bash 中:
cat f1
# a b
# c d
cat f2
# a b
# c d
Run Code Online (Sandbox Code Playgroud)
这些看起来完全一样,但如果我区分它们:
diff f1 f2
# Binary files f1 and f2 differ
Run Code Online (Sandbox Code Playgroud)
diff 并没有告诉我有什么区别。
那么回到主题,什么是二进制文件(毕竟在 PC 上一切都是二进制文件),我应该在什么情况下在 R 中使用它?
假设我有一个这样的函数:
myf = function(x) {
res = dostuff(x)
res # this is a data.frame
}
Run Code Online (Sandbox Code Playgroud)
我想做一些特别的事情res,例如,我想制作一些通用函数,例如print.myf, summary.myf, ...
,这样我就可以继续给它一个类:
myf = function(x) {
res = dostuff(x)
class(res) = 'myf'
res
}
Run Code Online (Sandbox Code Playgroud)
但是这样我就不能再将它用作 data.frame 了。
我经常遇到这样的场景,我希望两个类有相同的方法,当它们足够相似时.例如:
func.matrix = function(m) {
stopifnot(ncol(m) == 2)
c(mean(m[, 1]), sd(m[, 2]))
}
func.data.frame = function(m) {
stopifnot(ncol(m) == 2)
c(mean(m[, 1]), sd(m[, 2]))
}
Run Code Online (Sandbox Code Playgroud)
如何保存冗余?
必须两次输入函数原型是很烦人的>是否有自动执行此操作的IDE?
例如,如何在Eclipse中使用CDT执行此操作?
基本上我要求3件事:
我有时使用qt creator和vim进行c ++编程.当文件在vim中更改,焦点重新回到qt creator时,它会提示我接受或拒绝vim所做的更改,我一直选择yes.
据我所知,没有选项可以在qt creator中接受而不提示用户,所以我创建了一个bash脚本来解决这个问题:
#!/bin/bash
while true
do
myw=$(xdotool getactivewindow)
mywinprop=$(xprop -id ${myw})
if [[ \
$(echo "$mywinprop" | egrep 'NET_WM_NAME.*File Changed') && \
$(echo "$mywinprop" | egrep 'WM_CLASS.*qtcreator') \
]]
then
xvkbd -xsendevent -text "\r" >/dev/null 2>&1
else
sleep 0.5
fi
done
Run Code Online (Sandbox Code Playgroud)
它工作正常,出现提示对话然后很快消失,但它仍然很烦人.我想知道是否有更好的方法来做到这一点.(我已经提交了一个功能请求,但不确定他们是否会实现此功能.)
该解决方案可能适用于许多类似的情况.
我试图了解R expression对象,但遇到了一些困难.
代码段:
a = 1
b = 2
x = expression(sin(a+b+1))
print(class(x[[1]][2]))
eval(x[[1]][2])
Run Code Online (Sandbox Code Playgroud)
结果:
#////////////////////////////////////////////////////
x = expression(sin(a+b+1))
#////////////////////////////////////////////////////
print(class(x[[1]][2]))
[1] "call"
#////////////////////////////////////////////////////
x = expression(sin(a+b+1))
#////////////////////////////////////////////////////
print(class(x[[1]][2]))
[1] "call"
#////////////////////////////////////////////////////
eval(x[[1]][2])
Error in eval(expr, envir, enclos) : attempt to apply non-function
2: eval(expr, envir, enclos)
1: eval(x[[1]][2])
Run Code Online (Sandbox Code Playgroud)
x[[1]][2]是一个call对象,但为什么不能评估它?
使用ropemacs,您可以执行以下操作:
M-x rope-auto-import
Run Code Online (Sandbox Code Playgroud)
这会分析代码(我假设)并导入丢失的模块,例如,如果我写:
datetime.now()
Run Code Online (Sandbox Code Playgroud)
它应该通过添加此行来为我导入:
from datetime import datetime
Run Code Online (Sandbox Code Playgroud)
(它总是使用from ... import ...表格)
emacs-jedi中有类似的功能吗?
来自 clojure 为勇敢而真实的人:
(defmacro enqueue
[q concurrent-promise-name & work]
(let [concurrent (butlast work)
serialized (last work)]
`(let [~concurrent-promise-name (promise)]
(future (deliver ~concurrent-promise-name (do ~@concurrent)))
(deref ~q)
~serialized
~concurrent-promise-name)))
(defmacro wait
"Sleep `timeout` seconds before evaluating body"
[timeout & body]
`(do (Thread/sleep ~timeout) ~@body))
(time @(-> (future (wait 200 (println "'Ello, gov'na!")))
(enqueue saying (wait 400 "Pip pip!") (println @saying))
(enqueue saying (wait 100 "Cheerio!") (println @saying))))
Run Code Online (Sandbox Code Playgroud)
如果我注释掉该(deref ~q)行,则只有“Cheerio!” 被打印。为什么我需要在这里 deref 来获得其他副作用?
这是代码:
package scalafx.ensemble.example.charts
import javafx.scene.chart.PieChart.Data
import scala.util.Random
import scalafx.application.JFXApp
import scalafx.scene.Scene
import scalafx.Includes._
import scalafx.collections.ObservableBuffer
import scalafx.scene.chart.PieChart
import scalafx.scene.input.MouseEvent
object BasicPie extends JFXApp {
// data level 1
val pieChartDataBuffer: ObservableBuffer[Data] = ObservableBuffer(
PieChart.Data("A", 20),
PieChart.Data("B", 30),
PieChart.Data("C", 10),
PieChart.Data("D", 40)
)
pieChartDataBuffer.foreach(
(data: Data) => data.node().onMouseClicked = {
(_: MouseEvent) => pieChart.data = pieChartDataSubBuffer(data.name())
}
)
val pieChart = new PieChart {
data = pieChartDataBuffer
title = "DrillDown Pie Chart"
}
// data level 2
val pieChartDataSubBuffer: Map[String, ObservableBuffer[Data]] …Run Code Online (Sandbox Code Playgroud) 从Scala编程书中获取的类型示例:
case class Address(street: String, city: String)
case class Person(name: String, address: Address)
trait ToJSON {
def toJSON(level: Int = 0): String
val INDENTATION = " "
def indentation(level: Int = 0): (String,String) =
(INDENTATION * level, INDENTATION * (level+1))
}
implicit class AddressToJSON(address: Address) extends ToJSON {
def toJSON(level: Int = 0): String = {
val (outdent, indent) = indentation(level)
s"""{
|${indent}"street": "${address.street}",
|${indent}"city": "${address.city}"
|$outdent}""".stripMargin
}
}
implicit class PersonToJSON(person: Person) extends ToJSON {
def toJSON(level: Int = …Run Code Online (Sandbox Code Playgroud) r ×4
scala ×2
autocomplete ×1
automation ×1
bash ×1
binaryfiles ×1
c ×1
c++ ×1
clojure ×1
concurrency ×1
eclipse ×1
emacs ×1
emacs-jedi ×1
expression ×1
ide ×1
object ×1
oop ×1
python ×1
python-jedi ×1
typeclass ×1