Вот ответ, используя tidyverse
методы из dplyr
и tidyr
library(tidyverse)
df <- data.frame(ca = c("a","b","a","c","b", "b"),
f = c(3,4,0,NA,3, 4),
f2 = c(NA,5,6,1,9, 7),
f3 = c(3,0,6,3,0, 8))
df %>%
replace_na(list(f = 0, f2 = 0)) %>%
mutate(f_new = f + f2)
#> ca f f2 f3 f_new
#> 1 a 3 0 3 3
#> 2 b 4 5 0 9
#> 3 a 0 6 6 6
#> 4 c 0 1 3 1
#> 5 b 3 9 0 12
#> 6 b 4 7 8 11
ASP.NET 2,0 introducted медицинских контроля, которые позволяют Вам делать это, просто добавив некоторый материал к web.config. См.: http://msdn.microsoft.com/en-us/library/ms998306.aspx
Это может зарегистрироваться к почте, sql, eventlog, и т.д. и позволяет Вам устанавливать буферы. Таким образом, это, например, не уничтожит Ваш mailserver, если sql база данных понизится или если некоторый пользователь обнаруживает ошибку и попытки называть его слишком часто секундой :-)
Можно также зарегистрировать неудачную аутентификацию и перезапуски пула приложений с нею, довольно полезно, если Вам просто нужна она работающий быстрый. Все еще сомнительно - ли это лучшее решение управлять всеми ошибками. Поскольку это не могло бы, получил всю информацию, в которой Вы нуждаетесь, например, версия браузера или smt как этот.
ELMAH является библиотекой, которая включает и обнаруживает исключения. Можно также зарегистрировать событие сами. События и много данных как параметры URL и информация о браузере могут быть посланы по электронной почте администраторам и дополнительно сохранены в базе данных для дисплея. (Скорее как журнал событий для веб-сайта.) Это не сделало, чтобы встроенный пользователь сформировал это, я видел, но могу, вероятно, быть расширен для включения такой опции.
Я использовал/настраивал его в течение приблизительно двух лет теперь, и это действительно исключительно.
Другая опция могла бы состоять в том, чтобы использовать Kampyle, который включает поле обратной связи на нижнем правом из Вашего веб-сайта. Вы могли использовать JavaScript для инициирования поля, чтобы появиться, если проблема обнаруживается на веб-сайте.
Для ASP.NET applicatino - или любое веб-приложение в этом отношении - не является этим просто двухступенчатый процесс:
Или есть ли больше к этому?
Ваши ошибки пройдут через метод Application_Error файла Global.asax.cs (который Вам, вероятно, придется создать). Я использую этот факт, чтобы зафиксировать ошибку и зарегистрировать его к базе данных:
void Application_Error(object sender, EventArgs e)
{
try
{
SqlConnection errConnection = new SqlConnection("Your connection string");
// After setting up a command object, I call a stored procedure to save information about
// the crash. I pass two primary arguments. The first is the URL:
errCommand.Parameters.Add("@URL", SqlDbType.VarChar).Value = Request.Url.ToString();
// The second is the error information.
errCommand.Parameters.Add("@EI", SqlDbType.Text).Value = Server.GetLastError().ToString();
// I pass some other information from my session as well...
// After setting up an output parameter called ErrorID, I call the command...
errCommand.ExecuteNonQuery();
// Now Error ID is stored in the session.
Session["ErrorID"] = (int)ErrorID.Value;
}
catch { } // I do NOT want the error handling call to throw an error.
}
Теперь, необходимо было настроить сеть. Файл конфигурации так, чтобы определенная страница получила контроль, когда ошибка происходит. На этой странице Вы проверите сессию на ошибочный идентификатор и покажете его пользователю. В выводе я прошу, чтобы пользователь записал ошибку, если они хотели бы позвонить нам для получения дополнительной информации. Если мы действительно получаем запрос, я могу войти в базу данных и получить полную трассировку ошибки.
Вы можете контроль мое учебное руководство о том, как реализовать исключение, входящее в систему asp.net - http://jesal.us/blog/index.php/2008/04/08/exception-logging-using-the-database/