J'ai une liste (tmplist), qui ressemble à ceci: Il s'agit d'une liste avec une liste à l'intérieur.
Si j'ajoute cette liste à un vecteur p> maintenant le vecteur résultant est de la longueur 2, car la première entrée ("op") de la liste est séparée de la tmplist .
Est-il possible d'ajouter le tmplist complet dans ce vecteur?
de qui donne un vecteur de la longueur de 1, mais il est très encombrant d'accéder aux éléments de la liste avec cette liste supplémentaire autour de la liste. (Trop de liste dans une phrase que je pense.) p> Toute aide serait appréciée,
Je l'ai déjà essayé avec p>
p>
Martin P> P>
3 Réponses :
Vous pouvez coller un vecteur (une structure restreinte où tous les composants doivent être du même type) dans une liste (sans restriction). P>
Mais vous ne pouvez pas faire l'inverse. Utilisez des listes de listes de listes ... puis utilisez le Lapply et al pour extraire. P>
Je pense que c'est parce que le vecteur de R ne peut avoir qu'un certain type de "mode" S: numérique, caractère, logique, complexe, etc. mais il ne peut pas avoir d'éléments de type de liste. Donc, dans ce sens, le vecteur de R est très différent de la liste de Python. Ce dernier peut stocker des éléments de type arbitraire.
Oui, nous savons. La partie de cette partie est couverte par le type code> de R code> de R, tout comme mon répondit il y a sept ans.
Alors @wiswit: Votre bowvote est tout simplement faux. Dans R, une seule structure de données peut contenir différents types i> types: Liste code>. C'est ce que j'ai dit il y a sept ans. Me blâmer pour (par conception) limitations de
vecteur code> montre simplement votre malentendu.
@ Dirk Eddelbuettel: Je profite sûrement de votre réponse, désolé, le vote en panne n'est qu'une erreur. Toute façon que vous savez pour la réparer?
@wiswit: Oh, pas de soucis si c'était inadvertif. Vous pourrez peut-être simplement cliquer sur la flèche vers le bas.
L'expression 'c (TheoneVector, liste (TMPList))' ne retourna pas un vecteur de longueur 1, il a renvoyé une liste (par coement) car les éléments d'un vecteur doivent tous être du même mode (données Type).
Voici ce que vous pouvez faire pour créer un conteneur dans R qui détiendra des éléments de mode différent et dont les éléments sont faciles à accéder: P>
# create the container (an R 'list') vx = vector(mode="list") # create some items having different modes to put in it item1 = 1:5 item2 = "another item" item3 = 34 item4 = list(a = c(1:5), b = c(10:15)) # now fill the container vx$item1 = item1 vx$item2 = item2 vx$item3 = item3 vx$item4 = item4 # access the items in the container by name: vx$item1 # returns: [1] 4 5 6 vx$item2 # returns: [1] "another item"
Ou moins verbauly: v1 <- liste (item1 = 1: 5, élément2 = "Un autre élément", élément3 = 34, élément4 = Liste (A = C (1: 5), B = C (10:15)) `
Je pense qu'une liste Voici un exemple simple avec () code> de
liste () code> est ce que vous voulez.
lapply () code > qui montre comment les utiliser. Notez que
labapply () code> appliquera la fonction fournie à chaque élément de la liste indiquée dans l'argument et renvoyer une liste contenant les résultats des exécutions individuelles. P>
> l1 = list(a = 10, b = 11)
> l2 = list(a = 20, b = 22)
> test_function <- function(l){
return(paste("a =", l$a, "b = ", l$b, "\n"))
}
# Do something to each element of the list
# (i.e.: apply a function test_function() using lapply()).
# This will return a list over which you can iterate.
# Each individual list l1 and l2 is "wrapped" into a single list: list(l1, l2)
> res = lapply(X = list(l1, l2), FUN = test_function)
> res
[[1]]
[1] "a = 10 b = 11 \n"
[[2]]
[1] "a = 20 b = 22 \n"
# First element of the results
> res[1]
[1] "a = 10 b = 11 \n"
# Second element of the results
> res[2]
[1] "a = 20 b = 22 \n"