2017-05-15 4 views
0

Ich möchte den Namen einer Liste als Argument an eine Funktion übergeben, und dann dieser Liste innerhalb der Funktion zuweisen. Das folgende veranschaulicht das Problem.R: Versuchen, eine Liste als Argument übergeben

names <- c("a", "b", "c") 
mylist <- list() 

foo <- function(listname) { 
for(name in names){ 
    listname[[name]] <<- 7 
    } 
} 

Dies funktioniert nicht und generiert einen Fehler, dass "Listname" nicht bekannt ist. Kann das bitte jemand klären? Ich wäre sehr dankbar.

+0

Vermutlich machst du 'foo (mylist)'. Das Problem ist fast sicher, dass '<< -' zu '<-' geändert werden sollte. Außerdem wäre es besser, 'Namen' in' foo' als auch 'listname' zu ​​übergeben. – user1310503

+0

Danke. Meine Verwendung von << - ist sehr bewusst. Nach dem Aufruf von foo (mylist) möchte ich eine Liste, meine Liste, mit den Elementen mylist $ a, b, c haben, von denen jede (in diesem Beispiel) 7. – fcummins

Antwort

0

Ich denke, Sie haben ein paar Dinge schief gehen. Zunächst einmal glaube ich nicht, dass Sie irgendetwas in mylist gespeichert haben, d. H. Es gibt keine Namen oder irgendetwas, das Sie für Ihre Funktion überprüfen könnten. Versuchen Sie, auf Ihrer Liste etwas wie folgt aus:

mylist <- list("a", "b", "c") 
names(mylist) <- c("a", "b", "c") 
mylist 
#> $a 
#> [1] "a" 
#> 
#> $b 
#> [1] "b" 
#> 
#> $c 
#> [1] "c" 

In Ihrer Funktion, müssen Sie a) tun names(listname) so sind die Überprüfung Sie die Namen der aktuellen Liste und b) Rückkehr die Liste, nachdem Sie das tun Neuzuweisung. Dann kann es der Liste und zuweisen, die diese Werte zurückgibt.

foo <- function(listname) { 
    for(name in names(listname)){ 
     listname[[name]] <- 7 
    } 

    listname 
} 

foo(mylist) 
#> $a 
#> [1] 7 
#> 
#> $b 
#> [1] 7 
#> 
#> $c 
#> [1] 7 

Beachten Sie, dass mylist noch die gleichen Werte in sich hat; Nichts wurde neu zugewiesen.

mylist 
#> $a 
#> [1] "a" 
#> 
#> $b 
#> [1] "b" 
#> 
#> $c 
#> [1] "c" 
+0

Vielen Dank! – fcummins

Verwandte Themen