Guest User

Untitled

a guest
May 22nd, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.89 KB | None | 0 0
  1. namerecord1 <- data.frame(id=1, name='A', lastname="a", coordinate=1.23456)
  2. namerecord2 <- data.frame(id=2, name='B', lastname="b", coordinate=2.4560789)
  3. argument <- rbind(namerecord1, namerecord2)
  4.  
  5. List<NameRecord> tmpResult = new List<NameRecord>(3);
  6. tmpResult.Add(new NameRecord { Name = "ASDF", LastName = "asdf", Id = 1, DoubleValue = 1.456789 });
  7. tmpResult.Add(new NameRecord { Name = "QWER", LastName = "qwer", Id = 2, DoubleValue = 2.456789 });
  8. tmpResult.Add(new NameRecord { Name = "YXCV", LastName = "yxcv", Id = 3, DoubleValue = 3.456789 });
  9. return tmpResult.ToArray();
  10.  
  11. result <- clrCall(object, 'SetArgument', argument)
  12.  
  13. library(rClr)
  14. f <- file.path(path_to_net_dll,"ClassLibrary1.dll")
  15. clrLoadAssembly(f)
  16. obj <- clrNew("ClassLibrary1.Class1")
  17.  
  18. ## This the most important and difficult part of the code
  19. rclr2R_obj <-
  20. function(rclr_objs){
  21. fields <- c("DoubleValue" ,"Id","LastName","Name" )
  22.  
  23. fields_to_DF <- function(x)
  24. setNames(data.frame(
  25. lapply(fields,function(f)clrGet(x,f))),
  26. fields)
  27.  
  28. do.call(rbind,lapply(rclr_objs,fields_to_DF))
  29. }
  30.  
  31. new_data_frame <- rclr2R_obj(clrCall(obj,"GetObjects"))
  32.  
  33. # DoubleValue Id LastName Name
  34. # 1 1.456789 1 asdf ASDF
  35. # 2 2.456789 2 qwer QWER
  36. # 3 3.456789 3 yxcv YXCV
  37.  
  38. names <- letters[1:4]
  39. lnames <- LETTERS[1:4]
  40. ids <- as.integer(1:4)
  41. vals <- as.numeric(runif(4))
  42.  
  43. res <- clrCall(obj,"SetObjects",names,lnames,ids,vals)
  44. new_data_frame <- rclr2R_obj(res)
  45.  
  46. # DoubleValue Id LastName Name
  47. # 1 0.90695438 1 A a
  48. # 2 0.28337886 2 B b
  49. # 3 0.99027692 3 C c
  50. # 4 0.05794843 4 D d
  51.  
  52. namespace ClassLibrary1
  53. {
  54. public class Class1
  55. {
  56. // a simple c# class
  57. public class NameRecord
  58. {
  59. public string Name;
  60. public string LastName;
  61. public int Id;
  62. public double DoubleValue;
  63. }
  64.  
  65. public NameRecord[] GetObjects()
  66. {
  67. List<NameRecord> tmpResult = new List<NameRecord>(3);
  68. tmpResult.Add(new NameRecord { Name = "ASDF", LastName = "asdf", Id = 1, DoubleValue = 1.456789 });
  69. tmpResult.Add(new NameRecord { Name = "QWER", LastName = "qwer", Id = 2, DoubleValue = 2.456789 });
  70. tmpResult.Add(new NameRecord { Name = "YXCV", LastName = "yxcv", Id = 3, DoubleValue = 3.456789 });
  71. return tmpResult.ToArray();
  72. }
  73.  
  74.  
  75. public NameRecord[] SetObjects(string[] names,string[] lnames,int[] ids,double[] vals)
  76. {
  77. List<NameRecord> tmpResult = new List<NameRecord>();
  78.  
  79. for (var i = 0; i < names.Length; i++)
  80. {
  81. tmpResult.Add(new NameRecord {
  82. Name = names[i],
  83. LastName = lnames[i],
  84. Id = ids[i],
  85. DoubleValue = vals[i]
  86. });
  87. }
  88.  
  89. return tmpResult.ToArray();
  90. }
  91.  
  92.  
  93.  
  94. }
  95. }
Add Comment
Please, Sign In to add comment