2016-10-10 14 views
-1

Я новичок в R. И я хочу написать функцию, которая генерирует два вектора в R^2 И эта функция делает следующее : 1. Он принимает эти два вектора R^2 как два аргумента. 2.It вычисляет расстояние и угол между двумя векторами. 3.It проектирует первый вектор на второй вектор. 4.Посмотрите результат проецирования.Очень простой R - Я хочу написать функцию, которая генерирует два вектора в R^2

Я пробовал коды:

x <- function(x) 
y <- function(y) 
distance <- (sqrt(sum(x*x))*sqrt(sum(y*y))) 
theta <- -acos(sum(x*x)/distance) 
proj <- (x%*%y)/norm(y)%*%y 
if (length(x)==2 & length (y) ==2) 
{ print(distance) & 
print(theta) & 
print(proj)  
}else { 
print("Not R^2 vectors") 
} 

И я получил сообщение об ошибке:

> x <- function(x) 
+ y <- function(y) 
+ distance <- (sqrt(sum(x*x))*sqrt(sum(y*y))) 
> theta <- -acos(sum(x*x)/distance) 
**Error in x * x : non-numeric argument to binary operator** 
> proj <- (x%*%y)/norm(y)%*%y 
**Error: object 'y' not found** 
> if (length(x)==2 & length (y) ==2) 
+ { print(distance) & 
+  print(theta) & 
+  print(proj) 
+  
+ }else { 
+  print("Not R^2 vectors") 
+ } 
**Error: object 'y' not found**  

Я пытался исправить мой код в течение нескольких часов, и он до сих пор не работает. Кроме того, я не знаю, какую команду использовать для визуализации результата проецирования. Может ли кто-нибудь помочь мне в этом? Я бы очень признателен!

+1

Когда вы вводите код в R, вы увидите '+' на консоли, если ваша строка не завершена, а R ожидает большего количества кода в том же выражении. Вы увидите '>', когда предыдущая строка будет завершена, и R будет готов для нового выражения. Когда вы говорите 'x <- function (x)', вы создаете новую функцию с именем 'x', а R ожидает определения этой функции. Но вместо этого следующая строка 'y <- function (y)'. Похоже, вы, вероятно, хотите что-то вроде 'my_function <- function (x, y) {}'. – Gregor

+0

Итак, большая проблема - первые 2 строки. вы пытаетесь определить функции x и y как функции, но в синтаксисе R интерпретатор ждет определения функции после этого – Shape

+0

Спасибо! Я понял! :) – sunnypy

ответ

1

Вы планируете назвать это единственной функцией? Может быть, вы бы лучше обслуживаться с одной функцией с несколькими входными параметрами, а не несколько функций:

func <- function(x, y) { 
    distance <- (sqrt(sum(x*x))*sqrt(sum(y*y))) 
    theta <- -acos(sum(x*x)/distance) 
    proj <- (x%*%y)/norm(y)%*%y 
    if (length(x)==2 & length (y) ==2) 
    { print(distance) & 
      print(theta) & 
      print(proj)  
    }else { 
     print("Not R^2 vectors") 
    } 
} 

Таким образом, вы бы назвали это что-то вроде:

output <- func(x, y) 

Или, возможно, более четко :

output <- func(x = x, y = y) 

Примечание: Я не обращаюсь ни к чему в вашей функции, только так, как она создана и называется. Сама функция не имеет для меня большого смысла, поэтому я не буду пытаться ее редактировать.

+0

Спасибо! Я видел, где проблема: :) – sunnypy