একাধিক পরামিতি সহ ফাংশন প্রয়োগ


128

আমি f(var1, var2)আর তে একটি ফাংশন রেখেছি ধরুন আমরা সেট করেছি var2 = 1এবং এখন আমি f()তালিকায় ফাংশনটি প্রয়োগ করতে চাই L। মূলত আমি আউটপুটগুলির সাথে একটি নতুন তালিকা এল * পেতে চাই

[f(L[1],1),f(L[2],1),...,f(L[n],1)]

আমি কীভাবে এটি দিয়ে করব apply, mapplyবা lapply?


উত্তর:


190

কেবল প্রয়োগ ফাংশনগুলির একটিতে অতিরিক্ত যুক্তি হিসাবে var2 পাস করুন 2

mylist <- list(a=1,b=2,c=3)
myfxn <- function(var1,var2){
  var1*var2
}
var2 <- 2

sapply(mylist,myfxn,var2=var2)

এই একই পাসের var2প্রতিটি কলে myfxn। পরিবর্তে যদি আপনি প্রতিটি কল চান myfxn1 ম / 2 য় / 3 য় / ইত্যাদি পেতে। উভয়ের উপাদান mylistএবং var2, তারপরে আপনি mapplyএর ডোমেনে রয়েছেন ।


5
কিন্তু মনে রাখবেন যে myfxnvectorised করা যেতে পারে, যা ক্ষেত্রে এক ব্যবহার করা উচিতmyfxn(unlist(mylist), var2=var2)
Baptiste

আসল উদাহরণটি অস্পষ্ট ছিল তবে মনে হয়েছিল অ-ভেক্টরাইজড। পয়েন্ট ভালভাবে নেওয়া হয়েছে।
এরি বি ফ্রেডম্যান

এই কাজটিকে "উড়ন্ত অবস্থায়" হিসাবে কাজ করার উপায় কি? এর মতো কিছু: sapply(mylist, function(var1, var2) { var1*var2 }, var=thisvar2)তবে আমি একটি ত্রুটি পেয়েছি যে আর্গুমেন্ট 2 একাধিক আনুষ্ঠানিক যুক্তির সাথে মেলে
ইমুড্রাক

1
@ এমুদ্রাক আমার মনে হয় যে সমস্যাটি ঠিক আছে যে আপনি যুক্তিটির varপরিবর্তে পাস করার নামটিই নামকরণ করছেন var2। আর আপনি যা বলতে চাইছেন তা দিব্যি করতে পারে না।
এরি বি ফ্রেডম্যান

49

যদি আপনার ফাংশনটিতে দুটি ভেক্টর ভেরিয়েবল থাকে এবং সেগুলির প্রতিটি মানের জন্য নিজেকে গুনতে হয় (@ আরি বি ফ্রেডম্যান দ্বারা উল্লিখিত) আপনি mapplyনিম্নলিখিত হিসাবে ব্যবহার করতে পারেন :

vars1<-c(1,2,3)
vars2<-c(10,20,30)
mult_one<-function(var1,var2)
{
   var1*var2
}
mapply(mult_one,vars1,vars2)

যা আপনাকে দেয়:

> mapply(mult_one,vars1,vars2)
[1] 10 40 90

3
সাধারণকরণের জন্য একটি আপভোট, এমনকি সাধারণ এবং স্পষ্ট উদাহরণ সহ।
জেএসসি

mapplyযদি vars1একটি একক উপাদান থাকে তবে পুনর্ব্যবহার করবে । উদাহরণস্বরূপ কখন vars1 <- 3, mapply(mult_one, vars1, vars2)ফেরত দেয় 30 60 90। এটি কার্যকর যখন আপনি lapplyকোনও ফাংশনের দ্বিতীয় যুক্তি ব্যবহার করতে চান ।
পল রাউজিউক্স

3

@ আলেকজান্ডারের উদাহরণটিকে আরও সাধারণ করতে, outerএমন ক্ষেত্রে প্রাসঙ্গিক যেখানে কোনও ফাংশন অবশ্যই প্রতিটি জোড় ভেক্টরের মানগুলির মধ্যে নিজেকে গণনা করতে পারে :

vars1<-c(1,2,3)
vars2<-c(10,20,30)
mult_one<-function(var1,var2)
{
   var1*var2
}
outer(vars1,vars2,mult_one)

দেয়:

> outer(vars1, vars2, mult_one)
     [,1] [,2] [,3]
[1,]   10   20   30
[2,]   20   40   60
[3,]   30   60   90
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.