我想编写一个R函数,它接受一个公式作为它的第一个参数,类似于lm()或glm()和朋友.在这种情况下,它是一个获取数据框并以SVMLight格式写出文件的函数,它具有以下通用形式:
<line> .=. <target> <feature>:<value> <feature>:<value> ... <feature>:<value> # <info>
<target> .=. +1 | -1 | 0 | <float>
<feature> .=. <integer> | "qid"
<value> .=. <float>
<info> .=. <string>
Run Code Online (Sandbox Code Playgroud)
例如,以下数据框:
result qid f1 f2 f3 f4 f5 f6 f7 f8
1 -1 1 0.0000 0.1253 0.0000 0.1017 0.00 0.0000 0.0000 0.9999
2 -1 1 0.0098 0.0000 0.0000 0.0000 0.00 0.0316 0.0000 0.3661
3 1 1 0.0000 0.0000 0.1941 0.0000 0.00 0.0000 0.0509 0.0000
4 -1 …Run Code Online (Sandbox Code Playgroud) 我经常使用Sweave生成LaTeX文档,其中通过执行R代码动态生成某些块.这很好用 - 但是也可以使代码块以不同的方式执行,例如通过在shell中执行代码,或者运行Perl,依此类推?能够混合起来会很有帮助,所以我可以做一些事情,比如运行一些shell命令来获取一些数据,运行一些perl命令来预处理它,然后运行R命令来分析它.
当然,我可以使用所有R块并system()用作穷人的替代品,但这并不能使文档中的阅读非常愉快.
在R中,我有一堆我在GMT中测量的日期时间值.我一直遇到一些事故,其中一些功能或其他功能失去了我的价值观的时区,甚至失去了班级名称.即使是如此基本的功能c()和unlist():
> dput(x)
structure(1317830532, class = c("POSIXct", "POSIXt"), tzone = "GMT")
> dput(c(x))
structure(1317830532, class = c("POSIXct", "POSIXt"))
> dput(list(x))
list(structure(1317830532, class = c("POSIXct", "POSIXt"), tzone = "GMT"))
> dput(unlist(list(x)))
1317830532
Run Code Online (Sandbox Code Playgroud)
如果这种情况发生在我最不想要的时候,我觉得我的头发远离真正的火星气候轨道器时刻.任何人都有任何策略,以确保他们的日期"保持"?
以指定单位表示以intervalin 表示的时间长度的最佳方法是什么lubridate?我能弄明白的就是下面这个混乱的东西:
> ival
[1] 2011-01-01 03:00:46 -- 2011-10-21 18:33:44
> difftime(attr(ival, "start") + as.numeric(ival), attr(ival, "start"), 'days')
Time difference of 293.6479 days
Run Code Online (Sandbox Code Playgroud)
(我还在https://github.com/hadley/lubridate/issues/105上添加了这个功能请求,假设没有更好的方法可用 - 但也许有人知道一个.)
更新 - 显然该difftime功能也无法处理.这是一个例子.
> (d1 <- as.POSIXct("2011-03-12 12:00:00", 'America/Chicago'))
[1] "2011-03-12 12:00:00 CST"
> (d2 <- d1 + days(1)) # Gives desired result
[1] "2011-03-13 12:00:00 CDT"
> (i2 <- d2 - d1)
[1] 2011-03-12 12:00:00 -- 2011-03-13 12:00:00
> difftime(attr(i2, "start") + as.numeric(i2), attr(i2, "start"), …Run Code Online (Sandbox Code Playgroud) 我正在尝试将用Scala编写的Spark项目从Spark 1.2.1升级到1.3.0,所以我改变了我的build.sbt喜好:
-libraryDependencies += "org.apache.spark" %% "spark-core" % "1.2.1" % "provided"
+libraryDependencies += "org.apache.spark" %% "spark-core" % "1.3.0" % "provided"
Run Code Online (Sandbox Code Playgroud)
然后制作一个assembly罐子,然后提交:
HADOOP_CONF_DIR=/etc/hadoop/conf \
spark-submit \
--driver-class-path=/etc/hbase/conf \
--conf spark.hadoop.validateOutputSpecs=false \
--conf spark.yarn.jar=hdfs:/apps/local/spark-assembly-1.3.0-hadoop2.4.0.jar \
--conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
--deploy-mode=cluster \
--master=yarn \
--class=TestObject \
--num-executors=54 \
target/scala-2.11/myapp-assembly-1.2.jar
Run Code Online (Sandbox Code Playgroud)
作业无法提交,终端中存在以下异常:
15/03/19 10:30:07 INFO yarn.Client:
15/03/19 10:20:03 INFO yarn.Client:
client token: N/A
diagnostics: Application application_1420225286501_4698 failed 2 times due to AM
Container for appattempt_1420225286501_4698_000002 exited with exitCode: 127
due to: Exception …Run Code Online (Sandbox Code Playgroud) 我有一个我正在操作的DataFrame,我希望按一组列进行分组,并在其余列上按组操作.在普通RDD地区,我认为它看起来像这样:
rdd.map( tup => ((tup._1, tup._2, tup._3), tup) ).
groupByKey().
forEachPartition( iter => doSomeJob(iter) )
Run Code Online (Sandbox Code Playgroud)
在DataFrame陆地我会这样开始:
df.groupBy("col1", "col2", "col3") // Reference by name
Run Code Online (Sandbox Code Playgroud)
但是如果我的操作比GroupedData提供的平均/最小/最大/计数更复杂,那么我不确定如何操作组.
例如,我想为每个("col1", "col2", "col3")组构建一个MongoDB文档(通过遍历组中的关联Rows),缩小到N分区,然后将文档插入MongoDB数据库.该N限制是同时连接我想的最多数量.
有什么建议?
我一直试图深入研究我编写的一些R代码中的时间,所以我正在使用Rprof.但输出还不是很有用:
> summaryRprof()
$by.self
self.time self.pct total.time total.pct
"$<-.data.frame" 2.38 23.2 2.38 23.2
"FUN" 2.04 19.9 10.20 99.6
"[.data.frame" 1.74 17.0 5.54 54.1
"[.factor" 1.42 13.9 2.90 28.3
...
Run Code Online (Sandbox Code Playgroud)
有没有办法深入挖掘并找出哪些具体的调用$<-.data.frame,FUN(可能来自哪些by())等实际上是罪魁祸首?或者我是否需要重构代码并制作更小的功能块以获得更细粒度的结果?
我拒绝重构的唯一原因是我必须将数据结构传递给函数,并且所有传递都是按值进行的,所以这似乎是错误方向的一步.
谢谢.
我已经编写了以下函数subset(),我发现它很方便:
ss <- function (x, subset, ...)
{
r <- eval(substitute(subset), data.frame(.=x), parent.frame())
if (!is.logical(r))
stop("'subset' must be logical")
x[r & !is.na(r)]
}
Run Code Online (Sandbox Code Playgroud)
所以,我可以写:
ss(myDataFrame$MyVariableName, 500 < . & . < 1500)
Run Code Online (Sandbox Code Playgroud)
代替
myDataFrame$MyVariableName[ 500 < myDataFrame$MyVariableName
& myDataFrame$MyVariableName < 1500]
Run Code Online (Sandbox Code Playgroud)
这似乎是其他人可能已经为其开发的解决方案 - 包括核心RI中可能遗漏的内容.那里有什么东西吗?
我想要的东西:
java programName -jobs1 -C 10 -W 20
java programName -job2
java programName -job3
Run Code Online (Sandbox Code Playgroud)
内容:
Option o1 = new Option("job2", "some desc");
Option o2 = new Option("job3" , "(some desc")
Option o3 = OptionBuilder.hasArgs(2).withArgName( "W" ).withArgName("C").withDescription( "Some desc" ).create("job1")
Option o4 = new Option("help");
Options os = new Options().addOption(o1).addOption(o2).addOption(o3).addOption(o4).
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp( "ProgramName", options );
Run Code Online (Sandbox Code Playgroud)
...输出的位置是:
Usage ProgramName
-job1 <c> Some Desc
-job2 Some desc
-job3 Some desc
-help Print this message
Run Code Online (Sandbox Code Playgroud)
我希望-job1它应该打印-job1 -C …
我正在使用tox并coverage.py在我的连续构建服务器中运行我的Python项目的测试.我也有一个pkg_x来自我已安装使用的供应商的包(在PyPI上不可用),python3.5 setup.py install它将其放入/usr/lib/python3.5/site-packages.现在我需要将该包用于测试代码.
我的当前tox.ini看起来像这样:
[tox]
envlist = py35
[testenv]
deps = nose
coverage
commands = coverage run -m nose []
sitepackages = True
Run Code Online (Sandbox Code Playgroud)
我像这样运行测试:
python3.5 -m tox -- --verbose --with-doctest
Run Code Online (Sandbox Code Playgroud)
这失败了 - 没有找到我本地列出的依赖包setup.py(例如像公共的东西more_itertools),即使它确实创建了类似于.tox/py35/lib/python3.5/site-packages/more_itertools包含相关包的目录.如果我开火.tox/py35/bin/python3.5,sys.path看起来像这样:
>>> [re.compile('.*\\.tox').sub('.tox', x) for x in sys.path]
['',
'.tox/py35/lib64/python35.zip',
'.tox/py35/lib64/python3.5',
'.tox/py35/lib64/python3.5/plat-linux',
'.tox/py35/lib64/python3.5/lib-dynload',
'/usr/lib64/python3.5',
'/usr/lib/python3.5',
'.tox/py35/lib/python3.5/site-packages']
Run Code Online (Sandbox Code Playgroud)
如果我删除了我的sitepackages = True行tox.ini,那么我确实得到了更多,在那些包中,现在可以找到more_itertools我的setup.py …