回答
一個data.frame是一個列表,所以沿
#include <Rdefines.h>
SEXP df_fun(SEXP df)
{
int i, len = Rf_length(df);
SEXP result;
PROTECT(result = NEW_CHARACTER(len));
for (i = 0; i < len; ++i)
switch(TYPEOF(VECTOR_ELT(df, i))) {
case INTSXP:
SET_STRING_ELT(result, i, mkChar("integer"));
break;
case REALSXP:
SET_STRING_ELT(result, i, mkChar("numeric"));
break;
default:
SET_STRING_ELT(result, i, mkChar("other"));
break;
};
UNPROTECT(1);
return result;
}
行再經過R CMD SHLIB df_fun.c
> dyn.load("df_fun.so")
> df=data.frame(x=1:5, y=letters[1:5], z=pi, stringsAsFactors=FALSE)
> .Call("df_fun", df)
[1] "integer" "other" "numeric"
使用GET_CLASS
,GET_ATTR
和Rdefines.h中的其他宏(或其等價函數,如getAttrib
)來發現有關數據框的其他信息。請注意,data.frame的API可能與其結構不同。因此,例如R函數row.names
可以返回與row.names屬性中存儲的值不同的內容。我認爲大多數.Call
函數在原子向量上運行,保持對R級更復雜對象的操縱。
這裏有一個link to an example using C++ and package inline德克Eddelbeuttel:
感謝您的快速響應。 C++不是一個選項,因爲我被設計限制爲c。 – user151410
也許正在看''<?'的代碼? –
爲什麼對C的限制?對於R,你必然會使用gcc,這意味着你可以輕鬆地使用g ++。更簡單的API每次勝過更難的API。哦,並且由DWin指出的例子也可以輕鬆地返回數據幀。 –
data.frame類型是一個帶有「data.frame」屬性的列表。
這是實施例中的R (SRC /庫/統計/ SRC/model.c)的源創建data.frame的:
/* Turn the data "list" into a "data.frame" */
/* so that subsetting methods will work. */
PROTECT(tmp = mkString("data.frame"));
setAttrib(data, R_ClassSymbol, tmp);
UNPROTECT(1);
可以模擬 data.frame手動此方式:
l <- list(1:5)
attr(l, "class") <- "data.frame"
attr(l, "names") <- "Column 1"
attr(l, "row.names") <- paste("Row ", 1:5)
- 1. 將數據從C傳遞給R
- 2. 使用rpy2通過R函數傳遞熊貓數據幀
- 3. 將數據幀傳遞到函數中,並將數據幀傳遞到列ggplot
- 4. R - 將數據幀名稱的列表傳遞到函數中
- 5. jquery - 使用.call時傳遞參數()
- 6. 從R數據幀
- 7. R:從數據幀
- 8. 將DLL從CALL傳遞到EXE
- 9. 拆分數據幀傳遞到Sprintf在R
- 10. 使用RinRuby將數據框架從R傳遞到Ruby
- 11. R使用系統將數據幀傳遞到另一個程序()
- 12. 如何使用OpenCV將幀緩衝從C傳遞到Python
- 13. r使用在數據幀
- 14. 從C#傳遞圖像到R
- 15. 將數據從C#傳遞到PHP
- 16. 將數據從JavaScript傳遞到C#
- 17. 使用.Call獲取C到R的整數向量Lanugage
- 18. 使用作爲參數傳遞給R函數的數據幀變量名
- 19. [R knitr從數據幀
- 20. R:從頻率數據幀
- 21. 從數據幀中的R
- 22. 在R函數中傳遞數據幀的多個列名
- 23. R:將數據幀傳遞給函數動態
- 24. 如何從.Call返回結構數組到C共享庫R
- 25. 使用.Call時獲取R SEXP對象上的自定義屬性使用R的.Call接口從R調用R函數調用C函數
- 26. Angular $ http post call傳遞數據問題到GO後端
- 27. R數據幀
- 28. R:數據幀
- 29. R - 從數據幀中過濾數據
- 30. 功能的R,傳遞一個數據幀和列名
這正是我所期待的。感謝Martin。數據框的其他屬性(nrows,rownames,colnames,is.factor等)可以在傳遞DF時進行查詢並在返回DF時進行設置? RT – user151410
我加了幾句關於這個答案的結尾 –
謝謝。這有助於。 RT – user151410