Bubir vektörü bir listeye dönüştür
c("1", "a","b")
gibi bir vektör var ve bu listeyi oluşturmak istiyorum
list("a"=1,"b"=1)
bir "uygulama" stilinde bunu yapmanın bir yolu var mı? Teşekkürler.
-k
Bubir vektörü bir listeye dönüştür
c("1", "a","b")
gibi bir vektör var ve bu listeyi oluşturmak istiyorum
list("a"=1,"b"=1)
bir "uygulama" stilinde bunu yapmanın bir yolu var mı? Teşekkürler.
-k
Bunu beğendiniz mi? önceki hata tespit için Gavin şeref ile
R> kn <- c("1", "a", "b")
R> nl <- vector(mode="list", length=length(kn)-1)
R> names(nl) <- kn[-1]
R> nl <- lapply(nl, function(x) kn[1])
R> nl
$a
[1] "1"
$b
[1] "1"
R>
.
@Dirk: 'kn' herhangi bir isme sahip değildir ve' lapply' adımı 'nl'nin üzerine yazılmayacak, bu yüzden adlarını sopa yapmadan yapmayacaksınız? –
Tam anlamıyla kabuğumda çalıştım. –
Err, hayır, sen çok haklıydın. Düzeltildi, yeniden çalıştırıldı ve düzenlendi. Bunu gördüğünüz için teşekkürler. Bunun yerine –
Bir stil uygulamak değil, ancak basit bir fonksiyon gerekli komutları sarılmasıdır:
makeList <- function(vec) {
len <- length(vec[-1])
out <- as.list(rep(as.numeric(vec[1]), len))
names(out) <- as.character(vec[-1])
out
}
vektör kullanarak, o verir:
> vec <- c("1", "a","b")
> makeList(vec)
$a
[1] 1
$b
[1] 1
"as.numeric" öğesini "1" –
@ Joshua; woops! İyi noktalanmış. –
as.list
ve setNames
kullanma:
x = c("1", "a","b")
as.list(setNames(rep(as.numeric(x[1]), length(x) - 1), x[-1]))
__________neat! –
Bu soruyu, bir vektörün adlandırılmış bir listeye dönüştürülmesine ilişkin genel bir çözüm için bir çözüm ararken bulduğumda, sadece içerikler ile aynı isimleri aldırmazsanız bunu da yapabileceğinizi eklemek istedim: 'as.list (setNames (x, x))' – user5359531
Tamlık için, bir uygulamada bunu yapmak için daha basit bir tek liner var istendiği gibi ly" stili:
as.list(sapply(x[-1],function(y) as.double(x[1])))
, bu soruya bir cevap olarak yerini hak edecek kadar mutlaka temiz en hızlı seçenektir olmasa da. Bir vektöre gereksiz bir şekilde basitleştirilememekle önemli bir hızlandırma mümkündür:
library(microbenchmark)
microbenchmark(times=20,
Charles=as.list(setNames(rep(as.numeric(x[1]), length(x) - 1), x[-1])),
Gavin=makeList(x),
Anon=sapply(x[-1],function(y) as.double(x[1]),simplify=FALSE)
)
Unit: microseconds
expr min lq median uq max neval
Charles 10.868 11.7735 11.774 12.3775 55.848 20
Gavin 12.075 12.6795 13.132 13.8870 26.867 20
Anon 6.643 7.0950 7.548 8.1520 17.811 20
'as.list (sapply (...)) 'yerine' sapply (..., sadeleştirin = FALSE)' komutunu kullanın. –
Basitleştirmeksizin = F, biz istemedim özdeş (Charles, Anon) = FALSE olacaktır. Sadeleştirme = F ile öneriniz daha fazla hızlandırmaya yol açar --- Cevabımı güncelledim. Teşekkürler. – andrekos
Hi Khanh - bir değer, iki etiket? Bu tuhaf görünüyor. –
Karma bir tablo gibi hızlı bir bakışa ihtiyacım var. Bu durumda, "a" ve "b" bir ağdaki düğümlerdir ve 1 tanesi topluluk kimliğidir. Verimli mi? – knguyen