নেস্টেড তালিকার প্রথম উপাদানটি নির্বাচন করুন


88

ধরা যাক আমার মতো একটি তালিকা রয়েছে:

x = list(list(1,2), list(3,4), list(5,6))

আমি একটি তালিকা চাই যেখানে নেস্টেড তালিকার প্রথম উপাদান রয়েছে। আমি এর মতো অন্য একটি তালিকা ফিরিয়ে দিয়ে এটি করতে পারি

x1 = lapply(x, function(l) l[[1]])

এর জন্য কি শর্টকাট স্বরলিপি আছে?

উত্তর:


144

শর্টকাট খুব বেশি নয়, তবে আপনি এটি করতে পারেন:

lapply(x, `[[`, 1)
# [[1]]
# [1] 1
#
# [[2]]
# [1] 3
#
# [[3]]
# [1] 5

4
আমি শীতল দেখতে দেখতে রাজি। আমি আশা করছিলাম যে এটি করার জন্য আরও একটি ছোট উপায় থাকবে তবে আমি শীতল উপায়ে মীমাংসা করব!
অ্যালেক্স

@ A5C1D2H2I1M1N2O1R2T1 আমি পরিষ্কারতা এবং সংক্ষিপ্ততার প্রশংসা করি তবে আপনি "[["? আমি ল্যাপ্লি
তে

4
@ মেহরাদমাহমুদিয়ান, দেখার মতো আরও ভাল জায়গাটি হ'ল "এক্সট্র্যাক্ট" ( স্ট্যাট.থজ.চ.আর / ম্যানুয়াল / আর- ডেভেল / লাইবারি / বেস / এইচটিএমএল / এক্সট্রাক্ট এইচটিএমএল )।
A5C1D2H2I1M1N2O1R2T1

44

আর একটি সম্ভাবনা চমৎকার purrrলাইব্রেরি ব্যবহার করে :

library(purrr)
map(x, 1)

4
যারা ভাবছেন তাদের জন্য, এটি কাজ করে যেহেতু mapসংখ্যাসূচক মানগুলি নিষ্কাশন হিসাবে ব্যাখ্যা করে[[
qwr

12

আপনার উদাহরণ তালিকার জন্য আপনি কেবল এটি করতে পারেন:

unlist(x)[ c(TRUE,FALSE) ]

তবে এটি প্রতিটি উপ-তালিকার উপর নির্ভর করে ঠিক 2 উপাদান।

যদি উপাদানগুলির বিভিন্ন সংখ্যা থাকে তবে আপনি sapplyদৈর্ঘ্য গণনা করতে প্রথমে একটি করতে পারেন, তারপরে সংশ্লিষ্ট 1 ম উপাদান অবস্থানগুলি গণনা করুন (দেখুন cumsum), তারপরে unlistএড তালিকা থেকে সেই মানগুলি নির্বাচন করুন । তবে ততক্ষণে গ্রহণযোগ্য উত্তর সম্ভবত অনেক সহজ।

যদি সমস্ত উপলিস্টের দৈর্ঘ্য একই হয় (তবে এটি 2 থেকে পৃথক হতে পারে) তবে আপনি এর মতো কিছু করতে পারেন:

do.call( rbind, x)[,1]

বা সাধারণ কিছুতে অন্য কিছু castালাই। তবে আমি সন্দেহ করি যে এটি lapplyপদ্ধতির মতো দক্ষ হবে।


3

আমরা ব্যবহার করতে পারি pluckথেকে rvestযা প্রতিটি নেস্টেড তালিকা থেকে 1 ম উপাদান নির্বাচন

rvest::pluck(x, 1)
#[[1]]
#[1] 1

#[[2]]
#[1] 3

#[[3]]
#[1] 5

নোট করুন যে এটি পৃথক ফলাফল দেয় যা pluckথেকে purrr1 ম উপাদান ( x[[1]]) নির্বাচন করে

purrr::pluck(x, 1)

#[[1]]
#[1] 1

#[[2]]
#[1] 2

0

একটি সংক্ষিপ্ত স্বরলিপি নয়, তবে এটি একটি ভাঁজ দিয়েও করা যেতে পারে:

Reduce(function(a, b) c(a, b[1]), x, init = c()) 

# [[1]]
# [1] 1
# 
# [[2]]
# [1] 3
# 
# [[3]]
# [1] 5
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.