2014-01-09 2 views
2

Позвольте электронной таблице Excel подключиться к R через RExcel и вы хотите написать функцию VBA, которая вызывает некоторые R-функции.Использовать RInterface.GetArrayToVBA внутри функции VBA с массивами

В таблице Excel у вас есть несколько простых массивов, как следующие:

enter image description here

Код может быть что-то вроде этого:

Function foo(x As Range, y As Range) As Variant 

    RInterface.StartRServer 

    If IsNumeric(x) = True Then 
     RInterface.PutArrayFromVBA "x", x 
    End If 

    If IsNumeric(y) = True Then 
     RInterface.PutArrayFromVBA "y", y 
    End If 

    foo = RInterface.GetArrayToVBA("cbind(x, y, y^x)") 

End Function 

и его очевидна цель заключается в верните матрицу, содержащую cbind(x, y, y^x) в Excel.

Я не могу получить его, я получаю странные результаты, так как немного поправляю код: иногда вывод равен 1, иногда он равен #VALUE! ... он не работает, хотя, и я неспособный понять синтаксис, необходимый в таком случае.

+0

Не знаете, как работает 'R', но не' GetArrayToVBA («cbind (x, y, y^x)») 'предполагается' GetArrayToVBA (cbind (x, y, y^x)) 'учитывая тот факт, что что-либо внутри кавычек рассматривается как строка? –

+0

'Ошибка компиляции: Sub или Function not defined' ... и это подчеркивает' y' –

+0

Что такое синтаксис/параметрирование для 'Rinterface.GetArray()'? Просто сделал быстрый поиск в Интернете. Это что-то вроде «Rinterface.GetArray (« что-то »,« диапазон »)? –

ответ

2
Function foo(x As Range, y As Range) As Variant 

RInterface.StartRServer 
RInterface.PutArrayFromVBA "x", x.Value 'you were missing this .Value' 
RInterface.PutArrayFromVBA "y", y.Value 
foo = RInterface.GetArrayToVBA("cbind(x, y, y^x)") 

End Function 

Я пропускаю ваши проверки ошибок, так как они могут вызывать другие ошибки. Если вы хотите выполнить проверку ошибок, сделайте ошибку при ошибке goto

+0

Почему этот ответ не был принят после его принятия? есть ли что-нибудь, что вы хотели бы мне объяснить/добавить? – hedgedandlevered

Смежные вопросы