[R] condition has length > 1 for LL denominator
jim holtman
jholtman at gmail.com
Wed Nov 2 02:41:28 CET 2011
will this do it:
> x <- read.table(textConnection("arrive depart intercept
+ 1 1 1
+ 1 2 1
+ 1 3 1
+ 1 2 2
+ 1 3 2
+ 1 3 3
+ 2 2 2
+ 2 3 2
+ 3 3 3"), header = TRUE)
> closeAllConnections()
> denom <- lapply(split(x, x$intercept), function(.int){
+ paste(
+ sprintf("exp(P_%d_%d)", .int$arrive, .int$depart)
+ , collapse = "+"
+ )
+ })
>
> denom
$`1`
[1] "exp(P_1_1)+exp(P_1_2)+exp(P_1_3)"
$`2`
[1] "exp(P_1_2)+exp(P_1_3)+exp(P_2_2)+exp(P_2_3)"
$`3`
[1] "exp(P_1_3)+exp(P_3_3)"
On Tue, Nov 1, 2011 at 9:29 PM, David Winsemius <dwinsemius at comcast.net> wrote:
> Posted to another thread a response to this posting ( and to all those who wanted R on an iPad, I say "forget it"
> ---------
>
> The if function only takes an argument of length 1 (as the warning says):
>
> ?"if"
>
> Many such confusions are resolved by looking at :
>
> ?ifelse
>
> --
> David
> On Nov 1, 2011, at 4:45 PM, "M. Tran" <michellev.tran at gmail.com> wrote:
>
>> I have a dataset called "results" that looks like this:
>>
>> arrive depart intercept
>> 1 1 1
>> 1 2 1
>> 1 3 1
>> 1 2 2
>> 1 3 2
>> 1 3 3
>> 2 2 2
>> 2 3 2
>> 3 3 3
>>
>> where arrive is the period of arrival, depart is the period of departure,
>> and intercept is the period in which that person was counted. I'm trying to
>> construct the denominator for a likelihood function using the following
>> function. For the first row in "results", for example, I want the
>> denominator to be the sum of all possible arrive/depart combinations an
>> interceptor in period 1 could observe: exp(P_1_1) + exp(P_1_2) + exp(P_1_3)
>> (i.e. P_arrive_depart).
>>
>> get_denominator = function(intercept, periods_per_day)
>> {
>> denominator = array("(", nrow(results))
>> for (arrival in 1:periods_per_day)
>> {
>> for (departure in arrival:periods_per_day)
>> {
>> while (arrival <= intercept & intercept <= departure)
>> {
>> addition_to_denom = paste("P", arrival, departure, sep = "_")
>> if (nchar(denominator) == 1)
>> {
>> denominator = paste(denominator, "exp(", addition_to_denom, ")", sep =
>> "")
>> }
>> else
>> {
>> denominator = paste(denominator, " + exp(", addition_to_denom, ")", sep =
>> "")
>> }
>> }
>> }
>> }
>> denominator = paste(denominator, ")")
>> return(denominator)
>> }
>>
>>
>> denominator = get_denominator(intercept = results[,"intercept"],
>> periods_per_day = 3)
>>
>>
>> I'm getting the following warning message:
>>
>> In if (arrival <= intercept & intercept <= departure) { ... :
>> the condition has length > 1 and only the first element will be used.
>>
>> As written, the code gives me the denominator for a period 1 interceptor for
>> every single row!
>>
>> I'm having trouble figuring out how I should re-write this code. Any
>> suggestions would be greatly appreciated.
>>
>>
>>
>> --
>> View this message in context: http://r.789695.n4.nabble.com/condition-has-length-1-for-LL-denominator-tp3965365p3965365.html
>> Sent from the R help mailing list archive at Nabble.com.
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Jim Holtman
Data Munger Guru
What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.
More information about the R-help
mailing list