তালিকাভুক্ত তালিকা () কেন আর-তে খুন করে?


87

আমি যখন তারিখগুলির তালিকাটি তালিকাভুক্ত করি তখন এগুলি তাদের সংখ্যায় ফিরিয়ে দেয়। এটা কি স্বাভাবিক? ডেট হিসাবে পুনরায় আবেদন করা ছাড়া অন্য কোন কাজ?

> dd <- as.Date(c("2013-01-01", "2013-02-01", "2013-03-01"))
> class(dd)
[1] "Date"
> unlist(dd)
[1] "2013-01-01" "2013-02-01" "2013-03-01"
> list(dd)
[[1]]
[1] "2013-01-01" "2013-02-01" "2013-03-01"

> unlist(list(dd))
[1] 15706 15737 15765

এটি কি বাগ?


4
থেকে ?unlist: যেখানে সম্ভব তালিকাভুক্তির সময় তালিকার উপাদানগুলি একটি সাধারণ মোডে জোর করা হয়, এবং ফলস্বরূপ ফলাফল প্রায়শই একটি অক্ষর ভেক্টর হিসাবে শেষ হয়। ভেক্টরগুলি হায়ারার্কি NUL <কাঁচা <লজিক্যাল <পূর্ণসংখ্যা <আসল <জটিল <অক্ষর <তালিকা <এক্সপ্রেশন: উচ্চতর উপাদানগুলির সর্বাধিক ধরণের অংশে জোর করা হবে: প্যারিলিস্টদের তালিকা হিসাবে বিবেচনা করা হয়।
অরুন

6
হ্যাঁ আমি ম্যানুয়ালটি পড়েছি .... তারা ইতিমধ্যে একটি সাধারণ মোডে
টমাস ব্রাউন

4
আমি সম্মতি জানাই আচরণটি স্বাভাবিক নয়। তবে আপনি যে ফাংশনটি ব্যবহার করছেন তার ডকুমেন্টেশন পড়ার জন্য সর্বদা এটি প্রস্তাবিত।
অরুণ ২

7
@ আরুন আমি কেন তা প্রাসঙ্গিক তা দেখতে পাচ্ছি না। তারিখ ভেক্টরগুলি অভ্যন্তরীণভাবে পূর্ণসংখ্যা হয় তাই সমস্যাটি হ'ল বৈশিষ্ট্যগুলি কেড়ে নেওয়া হয়। ডকুমেন্টেশনটি এটি স্পষ্টভাবে উল্লেখ করে না, তবে তালিকাভুক্তি থেকে সাধারণভাবে বৈশিষ্ট্য সংরক্ষণের উপায় নেই।
হ্যাডলি

4
@ অরুন হ্যাঁ, কারণ unlistনন-লিস্ট ইনপুটগুলি অপরিবর্তিত রয়েছে। এটি আমার কাছে মোটেও অস্পষ্ট মনে হচ্ছে না, তবে ডকুমেন্টেশনে বৈশিষ্ট্যগুলির কী ঘটে তা উল্লেখ করা উচিত।
হ্যাডলি

উত্তর:


97

do.callএকটি তালিকা সহ "কিছু করতে" একটি সুবিধাজনক ফাংশন। আমাদের ক্ষেত্রে এটি ব্যবহার করে সম্মতি দিন c। এটি বর্তমানে এমন বিরল নয় cbindবা rbindএকটি একক বড় data.frame মধ্যে একটি তালিকা থেকে data.frames।

আমরা এখানে যা করছি তা হ'ল ddতালিকার উপাদানগুলিকে বোঝানো । এটি অনুরূপ হবে c(dd[[1]], dd[[2]])। নোট যে cফাংশন বা চরিত্র হিসাবে সরবরাহ করা যেতে পারে।

> dd <- list(dd, dd)
> (d <- do.call("c", dd))
[1] "2013-01-01" "2013-02-01" "2013-03-01" "2013-01-01" "2013-02-01" "2013-03-01"
> class(d) # proof that class is still Date
[1] "Date"

7
আপনি কী করছেন তা ব্যাখ্যা করে আপনি আরও কিছু বিশদ যুক্ত করতে পারলে এই উত্তরটির ব্যাপক উন্নতি হবে, সুতরাং অন্যরা পরে এটিকে আরও পঠনযোগ্য দেখতে পাবেন।
দিন্রে

4
@ আলেসান্দ্রো জ্যাকপসনের উক্তিটি প্রয়োজনীয় নয় (যদিও সহায়তার ফাইলটি দেখুন do.call) তবে কখনও কখনও এমন ক্রিয়াকলাপগুলির পক্ষে কার্যকর হতে পারে যা উদ্ধৃত করা প্রয়োজন, যেমন do.call("+", as.list(c(1, 1)))
রোমান Luštrik

4
আর একটি দুর্দান্ত পদ্ধতির তালিকা থেকে ভেক্টরের সাথে রূপান্তর সম্পাদন করা Reduce, যেমন Reduce("c",dd)
ওরিওল প্রট

4
@ ওরিওলপ্রট, যে Reducen-1 বার কল করে , যেখানে n তালিকার দৈর্ঘ্য। এটি বৃহত্তর ভেক্টরগুলির সাথে ভৌতিকভাবে সঞ্চালন করবে, অনুরূপভাবে (প্রকৃতপক্ষে, অভিন্নভাবে) কেন পুনরুক্তি অনুসারে একটি তালিকা / ভেক্টর তৈরি করা একটি দুর্বল পারফর্মার।
r2evans

4
কোডের জন্য ধন্যবাদ। প্রশ্নের উত্তর দেয় না, যদিও: তালিকাভুক্তি খেজুরকে হত্যা করে না কেন?
dfrankow

1

অথবা এটি ব্যবহার করে purrr একটি ভেক্টর ধরনের সংরক্ষণের করার জন্য তারিখ একটি তালিকা চেপ্টা হবে:

list(as.Date(c("2013-01-01", "2013-02-01", "2013-03-01"))) %>% purrr::reduce(c)

ফলাফল স্বরূপ

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