我有一个RCpp代码,在我试图将DataFrame转换为Matrix的代码的一部分.DataFrame只有数字(没有字符串或日期).
以下代码有效:
//[[Rcpp::export]]
NumericMatrix testDFtoNM1(DataFrame x) {
int nRows=x.nrows();
NumericMatrix y(nRows,x.size());
for (int i=0; i<x.size();i++) {
y(_,i)=NumericVector(x[i]);
}
return y;
}
Run Code Online (Sandbox Code Playgroud)
我想知道as.matrix在RCpp中是否有替代方式(即R中的等价物)来做同样的事情,类似于下面的代码(这不起作用):
//[[Rcpp::export]]
NumericMatrix testDFtoNM(DataFrame x) {
NumericMatrix y(x);
return y;
}
Run Code Online (Sandbox Code Playgroud)
*编辑*
谢谢你的回答.正如Dirk所说,C++代码比两个答案中的任何一个快24倍,Function版本比internal::convert_using_rfunction版本快2%.
我最初在没有打电话给R的情况下寻找RCpp的答案.当我发布我的问题时,我应该说清楚.
新手到Cython(也许这是一个基本问题).考虑这个博客中的两个例子:
# code 1
import numpy as np
def num_update(u):
u[1:-1,1:-1] = ((u[2:,1:-1]+u[:-2,1:-1])*dy2 +
(u[1:-1,2:] + u[1:-1,:-2])*dx2) / (2*(dx2+dy2))
Run Code Online (Sandbox Code Playgroud)
和
# code 2
cimport numpy as np
def cy_update(np.ndarray[double, ndim=2] u, double dx2, double dy2):
cdef unsigned int i, j
for i in xrange(1,u.shape[0]-1):
for j in xrange(1, u.shape[1]-1):
u[i,j] = ((u[i+1, j] + u[i-1, j]) * dy2 +
(u[i, j+1] + u[i, j-1]) * dx2) / (2*(dx2+dy2))
Run Code Online (Sandbox Code Playgroud)
假设我使用以下setup.py脚本编译第一个文件:
# setup file for code 1
from …Run Code Online (Sandbox Code Playgroud) (a)我有Julia Studio 0.4.3,我的安装(Windows)中的库设置指向C:/Program Files (x86)/JuliaStudio-0.4.3/julia-studio/Julia.在该目录中,我发现julia-basic.exe,julia-debug.exe,julia-debug-readline.exe和julia-readline.exe.我没找到julia.exe那个文件夹.
如果我在Julia studio中写一个Julia文件,但后来我想cmd在线或bat文件中运行它,exe我应该使用哪个?
如果我想从cmd行或bat文件(Windows)运行Julia,是否需要单独安装Julia ?
(b)朱莉娅文件也说我可以选择启动朱莉娅-p n(n工人数量在哪里).在Julia Studio中可以做到这一点吗?
要将字符串转换为R中的ascii代码,我通常使用:
> strtoi(charToRaw("abcd"),16L)
[1] 97 98 99 100
Run Code Online (Sandbox Code Playgroud)
是否存在反函数,即
>myDesiredFunc(c(97 98 99 100))
[1] "abcd"
Run Code Online (Sandbox Code Playgroud)
谢谢.
是否有任何简单的方法可以通过RCpp中的两个(或多个或一个)列来订购DataFrame?
网上有很多排序算法,或者我可以使用std::sortDataFrame的包装器,但我想知道RCpp或RCppArmadillo中是否有可用的东西?
我需要将此排序/排序作为另一个函数的一部分
DataFrame myFunc(DataFrame myDF, NumericVector x) {
//// some code here
DataFrame myDFsorted = sort (myDF, someColName1, someColName2) // how to sort??
//// some code here
}
Run Code Online (Sandbox Code Playgroud)
我想避免order在RCpp中访问R的功能(为了保持RCpp代码的速度).
非常感谢
我有一个Rcpp接受NumericMatrix并返回NumericVector的函数.在我的代码中,我有一条基于Kevin Ushey的建议:在Rcpp中 - 如何返回一个名称为NumericMatrix的列名分配给NumericMector的向量:
out.attr("names")=VECTOR_ELT(inp.attr("dimnames"),1)
如果NumericMatrix没有列名,则此代码会出错,即colnames(inp)=NULL.. 我怎么可以检查Rcpp是否VECTOR_ELT(inp.attr("dimnames"),1)是NULL?
我有一个数据提供程序,它提供了一个DDE链接(我可以在Excel中使用)和一个在后台运行的exe文件,它充当数据管理器(不确定这是否称为DDE服务器)和DDE链接连接到该exe文件.
我想绕过Excel并直接在Python中工作.我看到了一些关于DDE的例子,但它们都在Python 2中,我使用的是Python 3.
我在网上看到了一些例子:
import win32ui
import dde
...
...
server = dde.CreateServer()
server.Create("SomeName")
...
Run Code Online (Sandbox Code Playgroud)
但这些示例显示了如何创建DDE服务器.在我的情况下,有一个现有的exe是数据管理器(DDE服务器可能是?),在Excel中有一个菜单,我可以通过它来获取数据,如
' = DataProviderFunc1(Param1, Param2)'
' = DataProviderFunc2(Param1, Param2)'
Run Code Online (Sandbox Code Playgroud)
我想在Python中编写一个直接输出' = DataProviderFunc1(Param1, Param2)'等的代码,而不是打开Excel工作表,然后让Python读取Excel工作表的输出.
这可能吗?
我使用的是Python 3.4.谢谢
DDE模块上的文档似乎很少,例如http://docs.activestate.com/activepython/2.4/pywin32/dde.html
Python '或的 R sub/gsub函数的等价物是什么?pandasSeriesDataFrame
例如,在 R 中,我的代码是
schData<-gsub("/"," by ",schData,ignore.case=F)
Run Code Online (Sandbox Code Playgroud)
schData上面的Python 中的等效操作如下:
>>> type(schData)
Out[N]: pandas.core.series.Series
Run Code Online (Sandbox Code Playgroud)
对于常规字符串,有re.sub函数但似乎只适用于字符串
我有一个熊猫数据帧myDF的几个字符串列(其dtype为object)和许多数字列.我尝试了以下方法:
d=pandas.HDFStore("C:\\PF\\Temp.h5")
d['test']=myDF
Run Code Online (Sandbox Code Playgroud)
我得到了这个结果:
C:\PF\WinPython-64bit-3.3.3.3\python-3.3.3.amd64\lib\site-packages\pandas\io\pytables.py:2446: PerformanceWarning:
your performance may suffer as PyTables will pickle object types that it cannot
map directly to c-types [inferred_type->mixed,key->block2_values]
[items->[0, 1, 3, 4, 5, 6, 9, 10, 292, 411, 412, 477, 478, 479, 495, 572, 581, 590, 599, 608, 617, 626, 635]]
warnings.warn(ws, PerformanceWarning)
Run Code Online (Sandbox Code Playgroud)
看起来每个列都是一个字符串的问题.例如,如果我尝试
myDF[0].dtype
Run Code Online (Sandbox Code Playgroud)
我明白了
Out[38]: dtype('O')
Run Code Online (Sandbox Code Playgroud)
如何解决问题,即更改dtypefor string列,以便HDFStore可以将其视为字符串列?
*编辑*
更多信息请求
>>> pandas.__version__
Out[49]: '0.13.1'
>>> tables.__version__
Out[53]: '3.1.0'
Run Code Online (Sandbox Code Playgroud)
构建pandas数据框如下:
pandas.read_csv(fName,sep="|",header=None,low_memory=False)
Run Code Online (Sandbox Code Playgroud)
当我尝试
myDF.info()
Run Code Online (Sandbox Code Playgroud)
我明白了
Int64Index: …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用该inline库.
我尝试了http://adv-r.had.co.nz/C-interface.html上给出的第一个例子
library(inline)
add <- cfunction(signature(a = "integer", b = "integer"), "
SEXP result;
PROTECT(result = allocVector(REALSXP, 1));
REAL(result)[0] = asReal(a) + asReal(b);
UNPROTECT(1);
return(result);
")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Warning message:
running command 'make -f "C:/PROGRA~1/R/R-30~1.3/etc/x64/Makeconf" -f "C:/PROGRA~1/R/R-30~1.3/share/make/winshlib.mk" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD='$(SHLIB_CXXLD)' SHLIB="file21e05c17451a.dll" WIN=64 TCLBIN=64 OBJECTS="file21e05c17451a.o"' had status 127
ERROR(s) during compilation: source code errors or compiler configuration errors!
Program source:
1: #include <R.h>
2: #include <Rdefines.h>
3: #include <R_ext/Error.h>
4:
5:
6: extern "C" {
7: SEXP file21e05c17451a ( …Run Code Online (Sandbox Code Playgroud)