有没有办法将数据与ggplot2?相加?
我想做一个气泡图,其大小取决于z的总和.
目前我正在做类似的事情
dd <- ddply(d, .(x,y), transform, z=sum(z))
qplot(x,y, data=dd, size=z)
Run Code Online (Sandbox Code Playgroud)
但我觉得我两次写同样的东西,我希望能写出一些东西
qplot(x,y, data=dd, size=sum(z))
Run Code Online (Sandbox Code Playgroud)
我一看stat_sum和stat_summmary,但我不知道他们是合适的要么.
有可能ggplot2吗?如果没有,那么写出这两行的最佳方法是什么.
是否有R函数(或任何包)允许使用标准单位前缀(Kilo,Mega等...)格式化数字(整数),所以
10 -> 10
100 -> 1K
0.01 - > 10m
Run Code Online (Sandbox Code Playgroud)
等等......我可以自己做,但我宁愿不重新发明轮子.
我正在寻找相当于Ruby中的haskell instersperse函数.基本上,在列表的每个元素之间添加一些东西(比如分隔符).
intersperse(nil, [1,2,3]) => [1,nil,2,nil,3,nil,4].
Run Code Online (Sandbox Code Playgroud)
我不是要求任何代码(我可以做到,我可能在你阅读这个问题之前已经完成了).我只是想知道标准Ruby平台上是否已经存在这样的功能.
我不是要求任何代码,尤其是那些使用flatten的代码,因为它不起作用(flatten不仅平坦一个级别而且全部).我给出了示例[1,2,3]作为示例,但它应该可以使用
[[1,2],[3,4]].interperse("hello") => [[1,2], "hello", [3,4]]
Run Code Online (Sandbox Code Playgroud)
(请不要向我发送任何代码以使其有效,我已经拥有它
class Array
def intersperse(separator)
(inject([]) { |a,v| a+[v,separator] })[0...-1]
end
end
Run Code Online (Sandbox Code Playgroud)
)
我有以下代码(转换类似于转换)
instance {-# OVERLAPS #-} Transformable a a where
transform x = x
instance {-# OVERLAPPABLE #-} (Transformable l l', Transformable r r' )
=> Transformable (Either l r) (Either l' r')
where
transform = bimap transform transform
Run Code Online (Sandbox Code Playgroud)
当然,这些情况在我试图改变的情况下重叠Either a b来Either a b,并得到以下错误消息(ParsingError是一个类型别名Either something somethingElse)
Overlapping instances for Transformable
(parsingerror text) (parsingerror text)
arising from a use of ‘makereceipt’
matching instances:
Matching instances: Overlapping instances for Transformable
(ParsingError Text) (ParsingError Text)
arising …Run Code Online (Sandbox Code Playgroud) 问题出在标题中.基本上我正在寻找R的替代品.我一直在使用R,有一些非常好的东西(特别是data.frame plyr和ggplot),但我真的很喜欢Haskell和类型推断,所以我是想知道使用Haskell进行"简单"统计分析是一个不错的选择.
我的基本需求是:
然而,在处理真实世界数据之前,我对Haskell的体验一切正常.你总是遇到性能问题(并且很快),因为即使理论上你应该编写功能代码并且不担心计算机正在做什么,如果你不这样做并且不使用适当的库并且不是Haskell专家,东西很慢.
我在一个小项目上运行了HLint,它建议我使用&&&.
示例:
>>> cat st.hs
f = (+) 10
g = (+) 1
main = print $ (\x -> (f x, g x)) 5
>>> hlint st.hs
st.hs:4:17: Warning: Use &&&
Found:
\ x -> (f x, g x)
Why not:
f Control.Arrow.&&& g
1 suggestion
Run Code Online (Sandbox Code Playgroud)
我理解这\x -> (f x, g x)是一种模式,并欣赏这个建议.但是Control.Arrow.&&&没有正常的功能而是箭头,所以我不能&&&按照建议使用.
那么在那种情况下推荐的方式是什么?
&&&在函数上定义我自己的运算符?(arr f) &&& (arr g)但我甚至不知道如何评估它?我是新手Control.Lens,我正在尝试将2个镜头组合成"并行"(不是顺序),就像我对`Control.Arrow.&&&)一样.
如果我从lens文档中提取示例:
`data Foo a = Foo { _baz :: Int, _bar :: Int, a }
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情:
>> let foo = (bar &&& baz) .~ (1, 20) $ Foo undefined undefined "FOO"
>> foo ^. (bar &&& baz)
(1, 20)
Run Code Online (Sandbox Code Playgroud)
我到处寻找,我找不到办法.那是因为:
both或<*>)是微不足道的&&& 可以这样实现:
(/|\) :: Lens' f a -> Lens' f b -> Lens' f (a, b)
a /|\ b = lens getBoth setBoth where
getBoth f = …Run Code Online (Sandbox Code Playgroud) haskell中的记录或简单ADT几乎等同于盒装元组.有没有办法(理想情况下是一些花哨的扩展或来自haksell平台的lib)允许在这种类型和元组之间进行转换?
我(相当)是haskell的新手,我正在尝试在Haskell中构建一些报告工具.这涉及读/写csv文件和数据库表.使用元组的事情非常简单,但在使用普通类时需要一些锅炉板.样板接缝几乎完全相同,但我没有找到一个很好的方法只做一次,除了可能做转换(数据< - >元组)并使用从元组到CSV /表的本机转换.
到目前为止我得到的所有答案都假定我需要一些完全通用的东西,我想要元组.我不想要元组,我有元组,我不想要它们,因此需要转换它们.实际上我只想减少锅炉板(到0 :-)),但我不需要为每种类型都使用相同的功能.
例如,我可以通过展开其构造函数轻松地将元组转换为任何元素.问题是我需要uncurryN,我在任何地方都找不到(除了模板haskell教程).反过来更难做到.
我不是要求一个解决方案(尽管我得到的所有答案都很棒,因为我不熟悉Haskell中不同的元编程方式)但更多,因为我不喜欢重新发明轮子,如果轮子已经存在(例如,这个不连续的,可以用手写到20并包装在漂亮的包装中)
显然存在一个不成熟的包,但它仍然解决了一半的问题.
我有类似的问题本.但是,它涉及很多更新,我不确定IxSet是否是解决方案.
基本上我正在编写一个应用程序来优化仓库布局.没有数据库或任何东西; 它只是简单的数据来操作并在最后生成一个文件.仓库由不同尺寸的货架制成; 货架包含不同尺寸的箱子; 并且目标是找到最好的安排(或者至少是一个好的安排),在哪里放置盒子以便它们都适合.
基本模型(实际上并不重要)是:
data Dimension = Dimension {length::Double, width::Double, height::Double}
data Box = Box {boxId :: Int, boxDim:: Dimension }
data Shelf = Shelf {shelfId :: Int, shelfDim :: Dimension, postion :: ... }
Run Code Online (Sandbox Code Playgroud)
现在,第一个问题是有一个货架图.有些架子背靠背.我需要知道它,因为可以调整一个架子的深度(以相反的方式修改后架).我还需要知道对面的架子和下一个架子.
对此进行建模的最有效方法是什么?
我的第一个想法是:
data Shelf = Shelf { ... , backShelf :: Maybe Shelf
, frontShelf :: Maybe Shelf
, nextShelf :: Maybe Shelf
}
Run Code Online (Sandbox Code Playgroud)
现在,数据在Haskell中是不可变的,那么如何更新Shelf?我的意思是,想象一下我有一份清单Shelf; 如果我修改一个,那么我需要更新它的所有副本?
我的第二个想法是使用id代替:
newtype ShelfId = Int
data Shelf = Shelf { …Run Code Online (Sandbox Code Playgroud) 我看到处处Applicative可以处理副作用,但我见过的所有简单例子都是将各种东西组合在一起,如:
> (,,) <$> [1,2] <*> ["a", "b", "c"] <*> ["foo", "bar"]
[(1,"a","foo"),(1,"a","bar"),(1,"b","foo"),(1,"b","bar"),
(1,"c","foo"),(1,"c","bar"),(2,"a","foo"),(2,"a","bar"),
(2,"b","foo"),(2,"b","bar"),(2,"c","foo"),(2,"c","bar")]
Run Code Online (Sandbox Code Playgroud)
哪个很酷,但我看不出它与副作用有何联系.我的理解是,它Applicative是一个弱单子,所以你可以处理副作用(就像你对State monad一样),但你不能重复使用前一个副作用的结果.
这是否意味着>>可以写出Applicative类似的东西
do
print' "hello"
print' "world"
Run Code Online (Sandbox Code Playgroud)
会有意义(有print' :: a -> Applicative something)(使用适当的do-applicative扩展名).
在另一个世界,之间的区别Monad,并Applicative是Monad允许x <- ...,但Applicative没有.
然后,是作家monad,只是一个应用程序?
haskell ×7
r ×3
applicative ×1
arrows ×1
ggplot2 ×1
haskell-lens ×1
hlint ×1
monads ×1
ruby ×1
statistics ×1