Тип возвращаемого значения Rserve в случае нескольких операторов

Привет, я не совсем понимаю тип возврата Rserve в случае нескольких команд. например.

a<-rnorm(10);a[4];rnorm(3)

кажется, что Rserve возвращает только последний оцененный оператор, т.е. норм(3). Можно ли получить все три выходных значения с помощью Rserve?

Также мне интересно узнать, как именно в R мы можем получить возвращаемое значение последнего оцененного выражения? Есть ли в R специальный символ, чтобы получить то же самое, что и в Perl?


person FUD    schedule 02.05.2012    source источник


Ответы (1)


Это нормальное поведение R, сравнимое с поведением, которое вы получаете в функции. Например:

spam = function(x, y) {
  z = x + y
}

Здесь R возвращает z, поскольку это была последняя выполненная операция. Чтобы получить все объекты, вы можете использовать список:

spam = function(x, y) {
  z = x + y
  list(x,y,z)
}

Это должно работать в вашем случае:

a<-rnorm(10);list(a,a[4],rnorm(3))

Кроме того, я не знаю способа извлечь последнее выполненное выражение, но я бы все равно не рекомендовал его использовать. Такой синтаксис только затрудняет чтение программы и не экономит ваше время.

person Paul Hiemstra    schedule 02.05.2012
comment
Хм, я этого не знал, может быть, я что-то подцепил с помощью python. Я удалил это из ответа. - person Paul Hiemstra; 02.05.2012
comment
@SimonUrbanek привет, мне лень проверять исходный код :), вы помещаете команды, отправляемые в Rserve, в фиктивную функцию? - person FUD; 03.05.2012
comment
Нет, они оцениваются один за другим (парсер возвращает вектор выражения) и отправляется последнее значение — это действительно для того, чтобы избежать ловушек для начинающих пользователей, эффективнее просто обернуть код в { }, чтобы у вас был только один выражение. Итак, нет, вы не можете использовать return(), если это был вопрос :) - person Simon Urbanek; 04.05.2012