说,我想像这样定义一个记录属性:
data Attribute = Attribute {name :: String, value :: Any}
这当然不是有效的haskell代码.但是有一种类型'任何',基本上说任何类型都会这样做?或者是使用类型变量的唯一方法?
data Attribute a = Attribute {name :: String, value :: a}
我正在关注Python for Data Analysis一书中的示例.具体来说,2012年选举数据库来自第9章.数据位于一个大的csv文件中,以逗号分隔.但是文件的每一行都有一个额外的尾随分隔符,这似乎很混乱pandas.read_csv.
它将额外的分隔符视为有一个额外的列.因此,除了标题所需的列之外,还有一列.然后pandas.read_csv将第一列作为行标签.总体效果是列和标题不再对齐 - 第一列成为行标签,第二列由第一个标题命名,等等.
这很烦人.知道如何告诉pandas.read_csv做正确的事吗?我找不到一个.
好书,顺便说一句.
作为一个Erlanger,我对Haskell羡慕的一件事就是它的模块Data.List.它是经过深思熟虑和精心命名的,例如它的intersperse,intercalate和transpose功能.我想知道是否有Erlang项目试图收集常见的数据结构和实用程序实现,并以简洁的方式呈现它们.
R的predict函数可以带newdata参数,其文档如下:
newdata一个可选的数据框,用于查找要预测的变量.如果省略,则使用拟合值.
但我发现这并不完全正确,这取决于模型的拟合程度.例如,以下代码按预期工作:
x <- rnorm(200, sd=10)
y <- x + rnorm(200, sd=1)
data <- data.frame(x, y)
train = sample(1:length(x), size=length(x)/2, replace=F)
dataTrain <- data[train,]
dataTest <- data[-train,]
m <- lm(y ~ x, data=dataTrain)
head(predict(m,type="response"))
head(predict(m,newdata=dataTest,type="response"))
Run Code Online (Sandbox Code Playgroud)
但如果模型适合这样:
m2 <- lm(dataTrain$y ~ dataTrain$x)
head(predict(m2,type="response"))
head(predict(m2,newdata=dataTest,type="response"))
Run Code Online (Sandbox Code Playgroud)
最后两行将产生完全相同的结果.该predict函数以忽略newdata参数的方式工作,即它根本无法真正计算对新数据的预测.
罪魁祸首,当然是lm(y ~ x, data=dataTrain)对lm(dataTrain$y ~ dataTrain$x).但我没有找到任何提到这两者之间差异的文件.这是一个已知的问题吗?
我正在使用R 2.15.2.
我即将将一些代码从 futures-0.1 转换为 futures-0.3,其中poll()方法现在需要固定数据。我的一些结构是不可固定的,这使移植变得复杂。但是似乎存在通过impl Unpin为这些类添加一个的简单方法。这安全吗?有哪些替代方案?
示例代码:
extern crate futures;
use std::future::Future;
use std::pin::Pin;
use std::task::{ Poll, Context };
struct InnerData {
_pin: std::marker::PhantomPinned,
}
struct Stream {
}
struct Poller {
_data: InnerData,
file: Stream,
}
impl futures::stream::Stream for Stream {
type Item = ();
fn poll_next(self: Pin<&mut Self>, _cx: &mut Context) -> Poll<Option<Self::Item>> {
Poll::Pending
}
}
impl Future for Poller {
type Output = Result<(), ()>;
fn poll(self: Pin<&mut Self>, cx: &mut Context) -> …Run Code Online (Sandbox Code Playgroud) 在他的博客文章The Glasgow Haskell编译器和LLVM中,David Terei使用了一个生成冰雹序列来比较GHC性能与C的示例.我决定自己运行它,结果令人难以置信:GHC版本慢了一个多一级.代码是无辜的:
import Data.Word
collatzLen :: Int -> Word32 -> Int
collatzLen c 1 = c
collatzLen c n | n `mod` 2 == 0 = collatzLen (c+1) $ n `div` 2
| otherwise = collatzLen (c+1) $ 3*n+1
pmax x n = x `max` (collatzLen 1 n, n)
main = print . solve $ 1000000
where solve xs = foldl pmax (1,1) [2..xs-1]
Run Code Online (Sandbox Code Playgroud)
除了代入foldl用foldl',我不认为我可以做任何事情来了.GHC版本在45秒内找到答案,无论我使用哪个后端,而C版仅使用1.5秒!
我的设置是Haskell平台2011.2.0.1(32位)+ OS X 10.6.6与gcc 4.2.1.大卫在他的帖子中使用了GHC 6.13.这是GHC 7.0.3的已知错误吗?或者我一定错过了一些非常明显的东西. …
假设我需要解析一个二进制文件,该文件以三个4字节幻数开头.其中两个是固定字符串.然而,另一个是文件的长度.
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Attoparsec
import Data.Attoparsec.Enumerator
import Data.Enumerator hiding (foldl, foldl', map, head)
import Data.Enumerator.Binary hiding (map)
import qualified Data.ByteString as S
import System
main = do
f:_ <- getArgs
eitherStat <- run (enumFile f $$ iterMagics)
case eitherStat of
Left _err -> putStrLn $ "Not a beam file: " ++ f
Right _ -> return ()
iterMagics :: Monad m => Iteratee S.ByteString m ()
iterMagics = iterParser parseMagics
parseMagics :: Parser () …Run Code Online (Sandbox Code Playgroud) 我有以下(无辜)Rust代码:
let file = &Path(some_file_name);
let mut buf = [0u8, ..12];
match io::file_reader(file) {
Ok(reader) => reader.read(buf, buf.len()),
Err(msg) => println(msg)
}
Run Code Online (Sandbox Code Playgroud)
该rustc抱怨
不能借用
buf[]不可变的因为它也被借用为可变的
如果将相应的行更改为:
Ok(reader) => reader.read(buf, 12),
Run Code Online (Sandbox Code Playgroud)
一切都会好起来的.但它不太令人满意,因为现在缓冲区的长度在代码中重复.虽然模糊地理解为什么rustc抱怨,但我仍然认为rustc应该能够推断出这len()是一个纯粹的函数并且没有副作用,所以代码是有效的.此外,以这种方式读取缓冲区是一种非常常见的模式.
那么这里惯用的Rust方式是什么?
编辑:代码是为Rust 0.8.正如@pnkfelix指出的那样,Reader.readAPI从那时起就发生了变化.它不再需要第二个参数.
std::process::Command::new("/usr/bin/sh")
.arg("-c")
.arg("vim")
.arg("file")
.spawn()
.expect("Error: Failed to run editor");
Run Code Online (Sandbox Code Playgroud)
当我运行这段代码时,会运行一个 vim 进程,编辑该文件,尽管它没有在终端中打开(不确定确切的术语)我/是否可以在终端中实际打开 vim