我正在寻找如何在r中执行printf,即我想键入:
printf("hello %d\n", 56 )
Run Code Online (Sandbox Code Playgroud)
并获得与输入相同的输出:
print(sprintf("hello %d\n", 56 )
Run Code Online (Sandbox Code Playgroud)
我已阅读以下链接:
...所以我知道我可以使用cat("hello", 56),这可能就是我要做的,但只是想知道是否有一些快捷的写作方式print(sprintf(...))?
对不起,如果这个问题是重复的(我不知道).搜索'printf r'非常困难,因为它返回php,c,...的结果
我正在编写selenium测试,包含一组类,每个类包含几个测试.每个类当前打开然后关闭Firefox,这有两个结果:
我可以通过添加睡眠来解决错误54,但它仍然会超级慢.
所以,我想要做的是在所有测试类中重用相同的Firefox实例.这意味着我需要在所有测试类之前运行一个方法,在所有测试类之后运行另一个方法.因此,'setup_class'和'teardown_class'是不够的.
我在for循环中使用sklearn运行几个机器学习算法,并希望看到每个机器学习算法需要多长时间.问题是我还需要返回一个值,并且DONT想要多次运行它,因为每个算法都需要很长时间.有没有办法使用python的timeit模块或类似的函数捕获返回值'clf'...
def RandomForest(train_input, train_output):
clf = ensemble.RandomForestClassifier(n_estimators=10)
clf.fit(train_input, train_output)
return clf
Run Code Online (Sandbox Code Playgroud)
当我这样调用函数时
t = Timer(lambda : RandomForest(trainX,trainy))
print t.timeit(number=1)
Run Code Online (Sandbox Code Playgroud)
PS我也不想设置全局'clf',因为我可能想稍后进行多线程或多处理.
我在时间序列中使用lm,实际上运行得非常好,并且它超级超级快.
假设我的模型是:
> formula <- y ~ x
Run Code Online (Sandbox Code Playgroud)
我在训练集上训练这个:
> train <- data.frame( x = seq(1,3), y = c(2,1,4) )
> model <- lm( formula, train )
Run Code Online (Sandbox Code Playgroud)
......我可以预测新数据:
> test <- data.frame( x = seq(4,6) )
> test$y <- predict( model, newdata = test )
> test
x y
1 4 4.333333
2 5 5.333333
3 6 6.333333
Run Code Online (Sandbox Code Playgroud)
这非常好用,而且速度非常快.
我想将滞后变量添加到模型中.现在,我可以通过扩充我原来的训练集来做到这一点:
> train$y_1 <- c(0,train$y[1:nrow(train)-1])
> train
x y y_1
1 1 2 0
2 2 1 2
3 3 4 …Run Code Online (Sandbox Code Playgroud) 我有一个data.frame,我可以用matplot绘图:
> dim(lhbyzone)
[1] 38070 21
> matplot(lhbyzone)
(no error occurs here)
Run Code Online (Sandbox Code Playgroud)
但是,如果我采取lh的头,并尝试,它给了我一个奇怪的错误:
> foo <- head(lhbyzone,1000)
> matplot(foo)
Error in `rownames<-`(`*tmp*`, value = c("1", "2", "3", "4", "5", "6", :
length of 'dimnames' [1] not equal to array extent
Run Code Online (Sandbox Code Playgroud)
那么,也许与名字有关?
> dimnames(foo)
[[1]]
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
[11] "11" "12" "13" "14" "15" "16" "17" "18" "19" "20"
[21] "21" "22" "23" "24" "25" "26" "27" "28" "29" "30"
[31] "31" "32" …Run Code Online (Sandbox Code Playgroud) 如何在R中转换年,月,日和日期?
我知道人们可以通过字符串来做到这一点,但我宁愿避免转换为字符串,部分是因为可能会有性能损失?部分是因为我担心区域化问题,世界上有些人使用"年 - 月 - 日" "有些人使用"年 - 月 - 月".
看起来ISODate提供方向年,月,日 - > DateTime,虽然它首先将数字转换为字符串,所以如果有一种方法不通过字符串,那么我更喜欢.
从日期时间到数值,我找不到任何其他方面的东西?我宁愿不需要使用strsplit或类似的东西.
编辑:为了清楚,我所拥有的是一个数据框,看起来像:
year month day hour somevalue
2004 1 1 1 1515353
2004 1 1 2 3513535
....
Run Code Online (Sandbox Code Playgroud)
我希望能够自由转换为这种格式:
time(hour units) somevalue
1 1515353
2 3513535
....
Run Code Online (Sandbox Code Playgroud)
......还能再次回去.
编辑:清除一些关于'时间'(小时单位)意味着什么的混淆,最终我做了什么,并使用如何找到R中两个小时之间的差异的信息?:
前进方向:
lh$time <- as.numeric( difftime(ISOdate(lh$year,lh$month,lh$day,lh$hour), ISOdate(2004,1,1,0), units="hours"))
lh$year <- NULL; lh$month <- NULL; lh$day <- NULL; lh$hour <- NULL
Run Code Online (Sandbox Code Playgroud)
向后方向:
......好吧,我还没做倒退,但我想象的是:
我想在将来,我可以问我正在尝试解决的确切问题,但我试图将我的具体问题分解为通用的可重用问题,但也许这是一个错误?
我R项目正在变得越来越复杂,我开始寻找一些构造,这相当于在Java/C#类,或Python模块,让自己的全局命名空间不会成为与那些从来外使用功能散落一个特定的.r文件.
所以,我想我的问题是:在多大程度上可以将函数的范围限制在特定的.r文件或类似文件中?
我想我可以将整个.r文件放到一个巨大的函数中,然后将函数放在其中,但这与回声混淆:
myfile.r:
myfile <- function() {
somefunction <- function(a,b,c){}
anotherfunction <- function(a,b,c){}
# do some stuff here...
123
456
# ...
}
myfile()
Run Code Online (Sandbox Code Playgroud)
输出:
> source("myfile.r",echo=T)
> myfile <- function() {
+ somefunction <- function(a,b,c){}
+ anotherfunction <- function(a,b,c){}
+
+ # do some stuff here...
+ # . .... [TRUNCATED]
> myfile()
>
Run Code Online (Sandbox Code Playgroud)
您可以看到"123"未打印,即使我们echo=T在source命令中使用过.
我想知道是否有一些更标准的其他构造,因为将所有内容放在单个函数中听起来不像是真正标准的东西?但也许是这样?此外,如果它意味着echo=T工作那么这对我来说是一个明确的奖金.
我在Scala中有一个返回元组的方法,假设该方法被称为'test'.然后我想做
val (X,Y) = test()
Run Code Online (Sandbox Code Playgroud)
但是,当变量名称为小写时,模式匹配仅适用于Scala,即:
val(_X,_Y) = test(); val X = _X; val Y = _Y
Run Code Online (Sandbox Code Playgroud)
......工作正常,但很丑,而不是简洁.由于X和Y是矩阵,我真的不想使用小写变量.(在scipy和matlab中,我不会有这样的限制).
我认为有一些方法可以确保小写变量的行为类似于大写变量,即通过执行`x`.也许有一些方法可以使大写变量表现得像小写变量?所以,这是我的问题:在Scala中是否有某种方式直接将模式匹配到大写变量中?
我知道这是一个真正的noob问题,但是如何将数据框列表附加到数据框以形成新列表,所有data.frames在列表中的同一级别?
我的一些尝试:
> df <- data.frame(time=1:5)
> df
time
1 1
2 2
3 3
4 4
5 5
> innerlist <- list(df,df,df)
> innerlist
[[1]]
time
1 1
2 2
3 3
4 4
5 5
[[2]]
time
1 1
2 2
3 3
4 4
5 5
[[3]]
time
1 1
2 2
3 3
4 4
5 5
> outerlist <- list(df,innerlist)
> outerlist
[[1]]
time
1 1
2 2
3 3
4 4
5 5
[[2]] …Run Code Online (Sandbox Code Playgroud) 可能重复:
R限制中的并行处理
我在R多核中编写了一些代码,我在24核机器上运行它.实际上只有12个核心,但它们是超线程的,所以看起来有24个.
这有点奇怪:所有线程都运行在同一个核心上!因此,他们每个人只使用少量的cpu,而不是每个都运行在单个核心上,并且咀嚼所有可用的核心.
为简单起见,我只运行4个线程:
mclapply( 1:30, function(size) {
# time consuming stuff that is cpu bound (think "forecast.ets" et al)
}, mc.cores = 4, mc.preschedule = F )
Run Code Online (Sandbox Code Playgroud)
在运行此之前,已经有一个R进程在一个核心上运行,使用该核心容量的100%:

接下来,我启动"多核过程",另外4个线程争夺同一个核心!:

......所以,当他们每个人能够获得100%的核心时,他们每人获得一个核心的12%,或大约1%的可用处理能力.此外,另一个R进程现在只获得50%的核心.
操作系统是64位的Ubuntu 12.04.硬件是英特尔.R是版本2.15.2"捣蛋"
思考?(我知道我可以使用降雪,但我有很多变数,而且我真的不想拥有sfExport所有这些!)
编辑:哦,我想某处有一些全局锁定?但是,为什么两个完全独立的R进程之间会发生冲突?我可以并行运行两个R进程,每个进程占用核心CPU的100%.
编辑2:感谢Dirk的指针,我重建了openblas,现在看起来更健康了!:
