2012-08-01 2 views
1

Тестовые данные и метод его определения находится по адресу: Use of IF function in RСвязывание вектор правильно R

мне нужно ввести данные в «Test» в другую функцию. Ниже приведены данные для x и y (по существу два варианта: 1 = (89,3, 12,1) и 2 = (97,2, 8.5). Нижеприведенное уравнение является частью гораздо большей функции, но в этом и заключается проблема. сделать так, чтобы вызывать каждое из значений индивидуально из вектора, который у нас есть (Test), а для вывода должно быть 2 значения для каждого значения в тесте. Когда i link Test напрямую я получаю новый вектор с 50 выходными значениями, что делает . никакой реальный смысл, если я ставлю первое значение из вектора испытаний в, я получаю выход 2 значения, которое является правильным (я не проверил это вручную)

set.seed(1) 
Test <- ifelse(runif(50, 0, 1) < 0.69, rnorm(50, 25, 4), rnorm(50, 28, 4.3)) 


x <- c(89.3, 97.2) 
y <- c(12.1, 8.5) 

c(-0.75*(((Test)-x)/y)^2) 

выхода в настоящее время это из приведенной выше функции.:

[1] -21.32750 -55.05068 -25.23216 -49.25087 -20.09236 -53.28421 -19.61593 
[8] -51.81307 -21.32136 -62.68412 -22.28700 -56.50245 -21.33593 -47.71792 
[15] -18.53459 -55.10348 -16.12545 -42.79888 -19.73790 -40.38937 -17.77048 
[22] -51.94862 -19.20262 -54.78823 -18.92120 -51.75187 -22.82277 -52.08655 
[29] -18.82475 -45.86141 -16.28231 -56.33673 -24.02006 -50.75048 -14.97440 
[36] -40.67076 -20.51602 -50.05597 -21.04648 -58.66084 -20.32455 -65.47588 
[43] -20.01028 -53.19754 -15.84125 -52.88386 -23.09141 -50.51265 -19.73710 
[50] -50.32994 

но принимая первое значение из теста и поставить его вручную дает это:

c(-0.75*(((24.77549)-x)/y)^2) 
[1] -21.32750 -54.44958 

который является то, что я хочу для всех 50 значений в тесте

Спасибо за любую помощь.

ответ

2

Использование sapply:

set.seed(1) 
Test <- ifelse(runif(50, 0, 1) < 0.69, rnorm(50, 25, 4), rnorm(50, 28, 4.3)) 

x <- c(89.3, 97.2) 
y <- c(12.1, 8.5) 

result = sapply(Test, function(t) c(-0.75*(((t)-x)/y)^2)) 

result является то 2x50 матрица:

> result 
      [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7] 
[1,] -21.32750 -21.59186 -25.23216 -19.04891 -20.09236 -20.81548 -19.61593 
[2,] -54.44959 -55.05068 -63.29020 -49.25087 -51.63562 -53.28421 -50.54767 
      [,8]  [,9]  [,10]  [,11]  [,12]  [,13]  [,14] 
[1,] -20.17012 -21.32136 -24.96341 -22.28700 -22.23106 -21.33593 -18.37988 
[2,] -51.81307 -54.43561 -62.68412 -56.62937 -56.50245 -54.46874 -47.71792 
     [,15]  [,16]  [,17]  [,18]  [,19]  [,20]  [,21] 
[1,] -18.53459 -21.61509 -16.12545 -16.24298 -19.73790 -15.20235 -17.77048 
[2,] -48.07270 -55.10348 -42.52723 -42.79888 -50.82633 -40.38937 -46.31876 
     [,22]  [,23]  [,24]  [,25]  [,26]  [,27]  [,28] 
[1,] -20.22954 -19.20262 -21.47642 -18.92120 -20.14330 -22.82277 -20.29001 
[2,] -51.94862 -49.60262 -54.78823 -48.95848 -51.75187 -57.84436 -52.08655 
     [,29]  [,30]  [,31]  [,32]  [,33]  [,34]  [,35] 
[1,] -18.82475 -17.57154 -16.28231 -22.15805 -24.02006 -19.70470 -14.97440 
[2,] -48.73760 -45.86141 -42.88975 -56.33673 -60.55407 -50.75048 -39.86019 
     [,36]  [,37]  [,38]  [,39]  [,40]  [,41]  [,42] 
[1,] -15.32366 -20.51602 -19.40083 -21.04648 -23.18320 -20.32455 -26.20255 
[2,] -40.67076 -52.60188 -50.05597 -53.81015 -58.66084 -52.16534 -65.47588 
     [,43]  [,44]  [,45]  [,46]  [,47]  [,48] [,49] 
[1,] -20.01028 -20.77743 -15.84125 -20.63975 -23.09141 -19.60061 -19.7371 
[2,] -51.44830 -53.19754 -41.86986 -52.88386 -58.45297 -50.51265 -50.8245 
     [,50] 
[1,] -19.52067 
[2,] -50.32994 
+0

Спасибо за это. Так же, как добавление, я эффективно использовал его и применял его в своем уравнении, и теперь я получаю правильные ответы (проверен вручную). Позволяет называть мое уравнение Opt1, и я хочу разделить каждый из двух результатов от него на сумму двух выходов (с выходом 1 сверху (-54.44959/sum (-21.32750--54.44959)) = 0,7185, и, таким образом, другое значение для -21.32750 - подразумевается 0.2815. поэтому я хочу создать другой набор значений в том же формате, что и выше, но im пытается изощренно работать для меня здесь. – YesSure

+1

Как насчет 'apply (result, 2, function (v) v/sum (v)) ' –

+0

(' apply' применяет функцию к полям матрицы, то есть к строкам или столбцам. '2' сообщает, чтобы она применялась к столбцам). –

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