С помощью data.table
вы можете:
library(data.table)
setDT(dt)[,scale(fc),by=rep(1:nn,each=ceiling(KK/nn),length.out=KK)]
Здесь KK
- 130 209, а nn
- 12. Воспроизводимые данные:
set.seed(100)
KK<-130209L; nn<-12L
dt<-data.frame(mLow1=rnorm(KK),mHigh1=rnorm(KK),
mLow2=rnorm(KK),mHigh2=rnorm(KK),
meanLow=rnorm(KK),meanHigh=rnorm(KK),
fc=rnorm(KK),mean=rnorm(KK))
So нет необходимости разбивать данные и рекомбинировать.
Если вы хотите добавить это в кадр данных, а не просто извлечь его, вы можете использовать оператор :=
для назначения по ссылке:
setDT(dt)[,fc_scaled:=scale(fc)...]
Во-первых, Вы все еще, вероятно, захотите возвратить представление из своего действия, так возврат EmptyResult не является лучшим; но Вы поймете это, когда Вы будете иметь дело с потоком страницы в своем процессе регистрации.
я предполагаю, что Вы хотите создать электронное письмо HTML с помощью Представления, которое Вы уже создали. Это означает, что Вы хотите взять результат чего-то, что похоже на следующее:
public ActionResult CreateEmailView(RegistrationInformation info)
{
var userInformation = Membership.CreateNewUserLol(info);
return View(userInformation)
}
и отправляют это как тело электронной почты. Вы добираетесь для многократного использования представлений и всего того забавного материала.
можно использовать в своих интересах платформу путем создания пользовательского ActionResult и использования этого для генерации текста.
Вот некоторый псевдокод c#-like, который мог бы на самом деле скомпилировать и работа. Во-первых, пользовательский ActionResult:
public class StringResult : ViewResult
{
public string Html { get; set; }
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
if (string.IsNullOrEmpty(this.ViewName))
{
this.ViewName =
context.RouteData.GetRequiredString("action");
}
ViewEngineResult result = null;
if (this.View == null)
{
result = this.FindView(context);
this.View = result.View;
}
ViewContext viewContext = new ViewContext(
context, this.View, this.ViewData, this.TempData);
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream))
{
// used to write to context.HttpContext.Response.Output
this.View.Render(viewContext, writer);
writer.Flush();
Html = Encoding.UTF8.GetString(stream.ToArray());
}
if (result != null)
{
result.ViewEngine.ReleaseView(context, this.View);
}
}
}
Это переопределяет ExecuteResult базового метода (это - код от базового метода, я являюсь переопределяющим; возможно, изменился в RC1) представлять к потоку, которым я управляю вместо Потока вывода Ответа. Таким образом, это вытаскивает текст точно, как это было бы представлено к клиентской машине.
Затем, как Вы использовали бы это в действии контроллера:
public ActionResult CreateEmailView(RegistrationInformation info)
{
var userInformation = Membership.CreateNewUserLol(info);
// grab our normal view so we can get some info out of it
var resultView = View(userInformation);
// create our string result and configure it
StringResult sr = new StringResult();
sr.ViewName = resultView.ViewName;
sr.MasterName = resultView.MasterName;
sr.ViewData = userInformation;
sr.TempData = resultView.TempData;
// let them eat cake
sr.ExecuteResult(this.ControllerContext);
string emailHtml = sr.Html;
// awesome utils package, dude
Utils.SendEmailKThx(userInformation, emailHtml);
return resultView;
}
я представляю то же представление дважды; в первый раз, когда я представляю его к потоку и во второй раз, я обычно представляю его. Могло бы быть возможно красться в цепочку вызовов ViewResult где-то в другом месте и измениться, как Рендеринг работает, но поверхностный взгляд на код ничего не показывает. В то время как платформа довольно хороша, стек вызовов для частей процесса являются просто не достаточно мелкомодульными, чтобы помочь изменить одноэтапное в процессе. Если они повредили ExecuteResult в несколько различных переопределяемых методов, мы, возможно, изменили его от рендеринга до потока вывода к рендерингу к нашему потоку, не переопределяя весь метод ExecuteResult. О, хорошо....
У меня нет достаточного количества представителя для комментария, но я думал, что сэкономлю людям некоторое время путем указания, что кажется, что принятый ответ работал бы, и было бы замечательно, если бы это сделало. Однако кажется, что Механизм Представления WebForm просто ест параметр TextWriter. Здесь существует больше информации: http://ayende.com/Blog/archive/2008/11/11/another-asp.net-mvc-bug-rendering-views-to-different-output-source.aspx
Вы не видите само представление в контроллере. Способ сделать, что Вы спрашиваете, состоял бы в том, чтобы записать пользовательский подкласс ActionResult и пользовательский ViewEngine для обработки его. Переопределите ExecuteResult для фактической отправки электронного письма. Посмотрите на Spark с открытым исходным кодом, NHAML, и т.д., механизмы представления для MVC для примеров.
Эй Будет, от того, что я читаю (и моя собственная попытка реализовать Ваше решение) Представление. Метод рендеринга полностью игнорирует параметр устройства записи. Содержание моего устройства записи всегда пусто, и вместо этого представленное представление выболтано в к ответному потоку. Таким образом, это кажется невозможным (или довольно замысловатый, по крайней мере) для получения использования, Вы просматриваете как этот. Я думаю в Вашем тестовом сценарии, Вы видели бы представленное представление дважды, и Ваша электронная почта будет пробелом.
Я нашел некоторое обсуждение этого здесь: http://ayende.com/Blog/archive/2008/11/11/another-asp.net-mvc-bug-rendering-views-to-different-output-source.aspx
http://www.brightmix.com/blog/renderpartial-to-string-in-asp-net-mvc/ предлагает хорошее решение для рендеринга представления в строку, чтобы вы могли отправить его по электронной почте. . Он отмечает, что «рендеринг частичного представления строки, к счастью, стал намного, намного проще».
/// Static Method to render string - put somewhere of your choosing
public static string RenderPartialToString(string controlName, object viewData)
{
ViewDataDictionary vd = new ViewDataDictionary(viewData);
ViewPage vp = new ViewPage { ViewData = vd };
Control control = vp.LoadControl(controlName);
vp.Controls.Add(control);
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
using (HtmlTextWriter tw = new HtmlTextWriter(sw))
{
vp.RenderControl(tw);
}
}
return sb.ToString();
}