[R] shrink list by mathed entries

Soeren.Vogel at eawag.ch Soeren.Vogel at eawag.ch
Sat Nov 14 10:30:43 CET 2009


On 14.11.2009, at 03:58, David Winsemius wrote:

> On Nov 13, 2009, at 11:19 AM, Soeren.Vogel at eawag.ch wrote:
>
>> a <- c("Mama", "Papa", "Papa; Mama", "", "Sammy; Mama; Papa")
>> a <- strsplit(a, "; ")
>> mama <- rep(F, length(a))
>> mama[sapply(a, function(x) { sum(x=="Mama") }, simplify=T) > 0] <- T

[...]

>> ... produces the variables "mama" and "papa" correctly. But how do  
>> I remove all "Mama" list entries

[...]

> Maybe you should explain what you were trying to do?  Perhaps:
>
> > a[!mama]

[...]

> I would sidestep that confusing sequence of logical assignments and  
> just do this:
>
> > a[ -grep("Mama", a) ]

[...]

Explanation of what I want to do: This code is PHP, maybe rather crude  
but it works the way I want it and explains my goal:

#!/usr/bin/php
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('html_errors', false);
$strings = array("Mama", "Papa", "Papa; Mama", "", "Sammy; Mama;  
Papa", "Josh", "Mama");
$vars = array("Mama", "Papa", "Sammy");
$i=0;
foreach($strings as $line){
   $line = explode("; ", $line);
   $matches = array_intersect($line, $vars);
   $diffs = array_diff($line, $vars);
   foreach($matches as $match){
     eval("\$$match"."["."$i"."] = 1;"); // no easier way
   }
   foreach($diffs as $diff){
     $others[$i] = $diff;
   }
   $i++;
}
print_r($Mama); // array with elements 0, 2, 4, and 6 set to "1"
print_r($Papa); // array with elements 1, 2, and 4, set to "1"
print_r($Sammy); // array with element 4 set to "1"
print_r($others); // array with elements 3 set to "", and 5 set to  
"Josh"
?>

Sören




More information about the R-help mailing list