ল্যাপলির FUN এ বেশ কয়েকটি যুক্তি পাস করা (এবং অন্যরা * প্রয়োগ করুন)


105

আমি একটি ফাংশন একাধিক আর্গুমেন্ট ক্ষণস্থায়ী যখন ব্যবহার সংক্রান্ত একটি প্রশ্ন আছে lapplyমধ্যে R

আমি যখন সিনট্যাক্সের সাথে ল্যাপলি ব্যবহার করি lapply(input, myfun);- এটি সহজেই বোধগম্য হয় এবং আমি মাইফুনকে এর মতো সংজ্ঞায়িত করতে পারি:

myfun <- function(x) {
 # doing something here with x
}

lapply(input, myfun);

এবং উপাদানগুলি তর্ক inputহিসাবে পাস করা xহয় myfun

তবে আমার যদি আরও কিছু যুক্তি দেওয়ার দরকার হয় তবে myfunc? উদাহরণস্বরূপ, এটি এর মতো সংজ্ঞাযুক্ত:

myfun <- function(x, arg1) {
 # doing something here with x and arg1
}

উভয় inputউপাদান ( xযুক্তি হিসাবে ) এবং অন্য কিছু যুক্তি দিয়ে আমি কীভাবে এই ফাংশনটি ব্যবহার করতে পারি ?


4
";" এর সাথে আর কনসোল ইনপুট লাইনগুলি সমাপ্ত করা হচ্ছে; এটি এমন একটি চিহ্ন যা আপনি সম্ভবত অতীতে কিছু ম্যাক্রো প্রক্রিয়াকরণ ভাষা ব্যবহার করেছিলেন। ট্রিপল ডট আর্গুমেন্টটি "আপনার নিজের ফাংশনগুলি লেখার" বিভাগের "আর এর সাথে পরিচয় করিয়ে দেওয়ার" নথির বিভাগের 4 অনুচ্ছেদে বর্ণিত হয়েছে, আপনাকে প্রথমে পড়া উচিত "ম্যানুয়াল"।
আইআরটিএফএম

উত্তর:


124

আপনি যদি সহায়তা পৃষ্ঠাটি সন্ধান করেন তবে তার পক্ষে একটি আর্গুমেন্ট lapply রহস্যজনক ...। যখন আমরা সহায়তা পৃষ্ঠার আর্গুমেন্ট বিভাগটি দেখি, আমরা নীচের লাইনটি পাই:

...: optional arguments to ‘FUN’.

সুতরাং আপনাকে যা করতে হবে তা হ'ল আপনার অন্যান্য যুক্তিকে অন্তর্ভুক্ত করা lapply কলটিতে যুক্তি হিসাবে :

lapply(input, myfun, arg1=6)

এবং lapply, যে স্বীকৃতিarg1 এটি একটি আর্গুমেন্ট নয় তা কী করা উচিত তা স্বয়ংক্রিয়ভাবে এটিকে দেওয়া হবে myfun। অন্যান্য সমস্ত applyফাংশন একই জিনিস করতে পারে।

একটি সংযোজন: আপনি ...নিজের ফাংশনগুলিও লেখার সময় ব্যবহার করতে পারেন । উদাহরণস্বরূপ, বলুন যে আপনি কোনও ফাংশন লিখেছেন plotযা কোনও সময়ে কল করে এবং আপনি আপনার ফাংশন কল থেকে প্লট পরামিতিগুলি পরিবর্তন করতে সক্ষম হতে চান। আপনি প্রতিটি ফাংশনটিতে আপনার যুক্তি হিসাবে আর্গুমেন্ট হিসাবে অন্তর্ভুক্ত করতে পারেন তবে এটি বিরক্তিকর। পরিবর্তে আপনি ...(আপনার ফাংশন এবং এর মধ্যে প্লট করার কল উভয়ের পক্ষে একটি যুক্তি হিসাবে) ব্যবহার করতে পারেন এবং আপনার ফাংশনটি স্বীকৃত নয় এমন কোনও যুক্তি স্বয়ংক্রিয়ভাবে এতে চলে যেতে পারে plot


যদি আপনার দ্বিতীয় আরগ, উদাহরণস্বরূপ, "আরগ 1" এমন একটি তালিকা যা "ইনপুট" তালিকার সাথে মেলে? যখন আমি ল্যাপলি চেষ্টা করি (ইনপুট, মাইফুন, আরজি 1 = ইনপুট 2) যেখানে ইনপুট 2 একটি তালিকা থাকে তখন মনে হয় ল্যাপলি উপাদানটিকে 'ইনপুট' হিসাবে উপাদানটির পরিবর্তে একবারে পুরো তালিকাটি পাস করে।
অ্যালান

10
আমি স্রেফ অন্য পোস্টে একটি উত্তর পেয়েছি যা কাজ করে: ম্যাপ্লি (মাইফুন, ডিএফ $ ইনপুট, ডিএফ $ ইনপুট 2)
অ্যালান ২

18

অ্যালানের পরামর্শ অনুসারে, ফাংশন 'ম্যাপলি' একাধিক একাধিক তালিকাগুলি বা ভেক্টর যুক্তিগুলিতে একটি ফাংশন প্রয়োগ করে:

mapply(myfun, arg1, arg2)

ম্যান পৃষ্ঠাটি দেখুন: https://stat.ethz.ch/R-manual/R-devel/library/base/html/mapply.html


এবং এটি outerএকই শিরাতে উল্লেখযোগ্য , যা দুটি ভেক্টর আর্গুমেন্টে প্রতিটি জোড়া মানগুলিতে একটি ফাংশন প্রয়োগ করে। ম্যান পৃষ্ঠা: stat.ethz.ch/R-manual/R-devel/library/base/html/outer.html
MS609

11

আপনি নিম্নলিখিত পদ্ধতিতে এটি করতে পারেন:

 myfxn <- function(var1,var2,var3){
      var1*var2*var3

    }

    lapply(1:3,myfxn,var2=2,var3=100)

এবং আপনি উত্তর পাবেন:

[[1]] [1] ২০০

[[2]] [1] 400

[[3]] [1] 600


4
myfun <- function(x, arg1) {
 # doing something here with x and arg1
}

xএকটি ভেক্টর বা তালিকা এবং এতে myfunমধ্যে lapply(x, myfun)প্রতিটি উপাদানের জন্য বলা হয় xআলাদাভাবে।

বিকল্প 1

আপনি পুরো ব্যবহার করতে চান তাহলে arg1প্রতিটি myfunকল ( myfun(x[1], arg1), myfun(x[2], arg1)ইত্যাদি), ব্যবহার lapply(x, myfun, arg1)(যেমন উপরে বর্ণিত)।

বিকল্প 2

আপনি কিন্তু কল করতে চান তাহলে myfunপ্রতিটি উপাদানে arg1উপাদান পাশাপাশি আলাদাভাবে x( myfun(x[1], arg1[1]), myfun(x[2], arg1[2])ইত্যাদি), এটি ব্যবহার করা সম্ভব নয় lapply। পরিবর্তে, mapply(myfun, x, arg1)(উপরে বর্ণিত হিসাবে) ব্যবহার করুন apply:

 apply(cbind(x,arg1), 1, myfun)

বা

 apply(rbind(x,arg1), 2, myfun).
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.