jpalmucci@machineinsight.com
2004-Aug-03 19:48 UTC
[Rd] (PR#7152) Ops.ts returns non-ts object for univariate operations
This is a cryptographically signed message in MIME format. --------------ms010908060700000604050108 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Sorry. You're right about the univariate numeric operators. My bad. However, I was expecting !x to return a time series, just like the binary logical operators do. For example: > b <- ts(1:10) > 5 > b Time Series: Start = 1 End = 10 Frequency = 1 [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE > b & lag(b) Time Series: Start = 1 End = 9 Frequency = 1 [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE > b | lag(b) Time Series: Start = 1 End = 9 Frequency = 1 [1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE However, when you use the ! operator, the result is not a ts, which means the following is garbage: > b | !lag(b) Time Series: Start = 1 End = 10 Frequency = 1 [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE > Prof Brian Ripley wrote:>How about a statement of the problem and an example? It is not clear to >me that there is anything here that is not intentional, and the stated >analysis is plain wrong: Ops.ts _is_ called for univariate "-" and _does_ >return a time series. > >Both +a.ts and -a.ts return a ts. !a.ts does not, but we expect time >series to be numeric so that is deliberate. (Copying attributes wily-nily >when changing mode is not a good idea.) > >On Tue, 3 Aug 2004 jpalmucci@machineinsight.com wrote: > > > >>Full_Name: Jeff Palmucci >>Version: 1.9.1 >>OS: XP >>Submission from: (NULL) (129.44.190.60) >> >> >>Ops.ts returns a non-time series object for univariate operations. Here is a >>patch: >> >>Ops.ts <- function(e1, e2) >>{ >> if(missing(e2)) { >> ## univariate operator >> result <- NextMethod(.Generic) >> attributes(result) <- attributes(e1) >> result >> } else if(any(nchar(.Method) == 0)) { >> ## one operand is not a ts >> NextMethod(.Generic) >> } else { >> nc1 <- NCOL(e1) >> nc2 <- NCOL(e2) >> ## use ts.intersect to align e1 and e2 >> e12 <- .cbind.ts(list(e1, e2), >> c(deparse(substitute(e1))[1], >> deparse(substitute(e2))[1]), >> union = FALSE) >> e1 <- if(is.matrix(e1)) e12[, 1:nc1, drop = FALSE] else e12[, 1] >> e2 <- if(is.matrix(e2)) e12[, nc1 + (1:nc2), drop = FALSE] >> else e12[, nc1 + 1] >> NextMethod(.Generic) >> } >>} >> >>______________________________________________ >>R-devel@stat.math.ethz.ch mailing list >>https://www.stat.math.ethz.ch/mailman/listinfo/r-devel >> >> >> >> > > >--------------ms010908060700000604050108 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIJ+zCC Az8wggKooAMCAQICAQ0wDQYJKoZIhvcNAQEFBQAwgdExCzAJBgNVBAYTAlpBMRUwEwYDVQQI EwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENv bnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xJDAi BgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVy c29uYWwtZnJlZW1haWxAdGhhd3RlLmNvbTAeFw0wMzA3MTcwMDAwMDBaFw0xMzA3MTYyMzU5 NTlaMGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBM dGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQTCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxKY8VXNV+065yplaHmjAdQRwnd/p/6Me7L3N9Vvy Gna9fww6YfK/Uc4B1OVQCjDXAmNaLIkVcI7dyfArhVqqP3FWy688Cwfn8R+RNiQqE88r1fOC dz0Dviv+uxg+B79AgAJk16emu59l0cUqVIUPSAR/p7bRPGEEQB5kGXJgt/sCAwEAAaOBlDCB kTASBgNVHRMBAf8ECDAGAQH/AgEAMEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwudGhh d3RlLmNvbS9UaGF3dGVQZXJzb25hbEZyZWVtYWlsQ0EuY3JsMAsGA1UdDwQEAwIBBjApBgNV HREEIjAgpB4wHDEaMBgGA1UEAxMRUHJpdmF0ZUxhYmVsMi0xMzgwDQYJKoZIhvcNAQEFBQAD gYEASIzRUIPqCy7MDaNmrGcPf6+svsIXoUOWlJ1/TCG4+DYfqi2fNi/A9BxQIJNwPP2t4WFi w9k6GX6EsZkbAMUaC4J0niVQlGLH2ydxVyWN3amcOY6MIE9lX5Xa9/eH1sYITq726jTlEBpb NU1341YheILcIRk13iSx0x1G/11fZU8wggNYMIICwaADAgECAgMLrW8wDQYJKoZIhvcNAQEE BQAwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0 ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMB4XDTA0 MDIwOTIzMTE1MloXDTA1MDIwODIzMTE1MlowgZYxHzAdBgNVBAMTFlRoYXd0ZSBGcmVlbWFp bCBNZW1iZXIxJDAiBgkqhkiG9w0BCQEWFXBhbG11Y2NpQGFsdW0ubWl0LmVkdTEgMB4GCSqG SIb3DQEJARYRanBhbG11Y2NpQHJjbi5jb20xKzApBgkqhkiG9w0BCQEWHGpwYWxtdWNjaUBt YWNoaW5laW5zaWdodC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDV29qd kRrXAYWUnO65QB5RKEOAT0cM1e25Mm3cLUmUPlXb4Q9rVMmgocNAB2gu10BE6dtnX92lzELC zeh7WftzYJuyiL0pzH9lAnWSAKMzyHsj4Alb3mE4FMQ8GFLrZyywuewNFmQoQOiCdVns7c49 UPX+2zW1OZDnJXLl/08Kbkigc1hXi0tRkgLK/PQqmHsvmINTy6ALAlMhva3D4v62sPmwhnUa QlWNvHPALKRhsq8vsCs+xb+RyfO4fNKh/t3MuETgZFIXsEBS9pwJNEhY2+qEvTrx/tBbbEaD nB/+ly/4GNRfwVmzckzxwQaLPvokcaOu0nJzOduoPditUInNAgMBAAGjYzBhMFEGA1UdEQRK MEiBFXBhbG11Y2NpQGFsdW0ubWl0LmVkdYERanBhbG11Y2NpQHJjbi5jb22BHGpwYWxtdWNj aUBtYWNoaW5laW5zaWdodC5jb20wDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQQFAAOBgQDC f2BTNWvk0t3Li81GnR8AbDsXZ0k0Q2wso8vE7TAP47JIYoltmKBcbZ8tvkqbVHf9l7RRl3Od wZLSGC9AkCq4vU6FqKHGSU0cmBitGLXJu3Vgcm+TFhYRweAMbys7O9OzhUHO9/RuAiXdJg1+ wYVdc33z4B3dbLf0yVwBkY/snzCCA1gwggLBoAMCAQICAwutbzANBgkqhkiG9w0BAQQFADBi MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEs MCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIElzc3VpbmcgQ0EwHhcNMDQwMjA5 MjMxMTUyWhcNMDUwMjA4MjMxMTUyWjCBljEfMB0GA1UEAxMWVGhhd3RlIEZyZWVtYWlsIE1l bWJlcjEkMCIGCSqGSIb3DQEJARYVcGFsbXVjY2lAYWx1bS5taXQuZWR1MSAwHgYJKoZIhvcN AQkBFhFqcGFsbXVjY2lAcmNuLmNvbTErMCkGCSqGSIb3DQEJARYcanBhbG11Y2NpQG1hY2hp bmVpbnNpZ2h0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANXb2p2RGtcB hZSc7rlAHlEoQ4BPRwzV7bkybdwtSZQ+VdvhD2tUyaChw0AHaC7XQETp22df3aXMQsLN6HtZ +3Ngm7KIvSnMf2UCdZIAozPIeyPgCVveYTgUxDwYUutnLLC57A0WZChA6IJ1Weztzj1Q9f7b NbU5kOclcuX/TwpuSKBzWFeLS1GSAsr89CqYey+Yg1PLoAsCUyG9rcPi/raw+bCGdRpCVY28 c8AspGGyry+wKz7Fv5HJ87h80qH+3cy4ROBkUhewQFL2nAk0SFjb6oS9OvH+0FtsRoOcH/6X L/gY1F/BWbNyTPHBBos++iRxo67ScnM526g92K1Qic0CAwEAAaNjMGEwUQYDVR0RBEowSIEV cGFsbXVjY2lAYWx1bS5taXQuZWR1gRFqcGFsbXVjY2lAcmNuLmNvbYEcanBhbG11Y2NpQG1h Y2hpbmVpbnNpZ2h0LmNvbTAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBBAUAA4GBAMJ/YFM1 a+TS3cuLzUadHwBsOxdnSTRDbCyjy8TtMA/jskhiiW2YoFxtny2+SptUd/2XtFGXc53BktIY L0CQKri9ToWoocZJTRyYGK0Ytcm7dWByb5MWFhHB4AxvKzs707OFQc739G4CJd0mDX7BhV1z ffPgHd1st/TJXAGRj+yfMYIDOzCCAzcCAQEwaTBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMc VGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFs IEZyZWVtYWlsIElzc3VpbmcgQ0ECAwutbzAJBgUrDgMCGgUAoIIBpzAYBgkqhkiG9w0BCQMx CwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wNDA4MDMxNzQ4MTRaMCMGCSqGSIb3DQEJ BDEWBBQaAsBESsK5kCIHv8r1Fj3hxyOWtTBSBgkqhkiG9w0BCQ8xRTBDMAoGCCqGSIb3DQMH MA4GCCqGSIb3DQMCAgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIB KDB4BgkrBgEEAYI3EAQxazBpMGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29u c3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwg SXNzdWluZyBDQQIDC61vMHoGCyqGSIb3DQEJEAILMWugaTBiMQswCQYDVQQGEwJaQTElMCMG A1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBl cnNvbmFsIEZyZWVtYWlsIElzc3VpbmcgQ0ECAwutbzANBgkqhkiG9w0BAQEFAASCAQCFvZN+ CVGJqXPZNtcNx+7ha20b3JkOkttHSJGB2BQFCEKE1FyE9vIrgL/H+GHF8bNrLpaDV/JGqnMv ki7x9HAwzPuLzgF4liW/W24fJlmcM1Pcr8sWfhC1jOgmfhX+P7ne3R0hCugTb0I/5skg/mCv F2/s+hlANeWKtaWLEMaO+IoL5PMkFQFgGa8wH25JQg8u8WR06kNZdBUsLUTgPOVHE/k3jMf6 QGHUt4+TxKhCeHhzFficRn3OLf01sxHOc8XCizsbut6mbAp7SbMua+qKop31FhCfv3+lHTpE DdghFJowunt/lbLam1OYprjZdZ/5SUjfnaB6tPzj3IsJSfl/AAAAAAAA --------------ms010908060700000604050108--
Gabor Grothendieck
2004-Aug-03 20:10 UTC
[Rd] (PR#7152) Ops.ts returns non-ts object for univariate operations
<jpalmucci <at> machineinsight.com> writes: : However, I was expecting !x to return a time series, just like the : binary logical operators do. : : For example: : : > b <- ts(1:10) > 5 : : > b | !lag(b) : Time Series: : Start = 1 : End = 10 : Frequency = 1 : [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE As a workaround you could use the fact that xor(b, TRUE) negates b yet remains a ts object.