簡體   English   中英

如何正確地將數據從 dataframe 傳遞到 function?

[英]How do I correctly pass data from a dataframe into a function?

我有一個用戶定義的 function,我想在 dataframe 的所有行中使用它。 我嘗試使用 apply() function 來完成此操作,但我認為我的語法不正確。 我還嘗試制作另一個用戶定義的 function 來完成此操作,但它一直在創建錯誤。 我試圖制作一個最小的可重現錯誤示例,但它似乎與我的實際代碼沒有相同的問題。 但是,在最小的可重現示例中,我確實注意到“結果” dataframe 中的變量的 class 都是字符,我希望其中一些是雙倍的。 我希望至少在示例代碼中糾正這個問題將幫助我找出實際代碼中的問題。

任何關於這樣做的好方法的建議將不勝感激。

library(tidyverse)

function1 <- function(cut, depth, price){
    result <- data.frame(cut = character(),
                        depth = double(),
                        price = double(),
                        new_value = double(),
                        new_char = character())
    
    new_value <- depth*price
    new_char <- paste0(cut, "kjh", as.character(depth))
    
    result[nrow(result) + 1,] <- c(cut, depth, price, new_value, new_char)
    
    print(result)
}

#use function with variables
function1("good", 100, 3) 

#use function on all rows in a dataframe
df <- head(diamonds)

function2 <- function(){
  for(i in 1:nrow(df)) {
    row <- df[i,]
    #function1 on each row
   function1(row$cut, row$depth, row$price)
 }
}

function2()

#how to use apply function?
apply(df, 1, function1(cut, depth, price))

我們可以使用mapply/Map - apply轉換到matrix ,矩陣只能有一個 class。 因此,我們使用Map/mapply循環遍歷每一列,並在相應的元素上應用 function

do.call(rbind, Map(function1, df$cut, df$depth, df$price))

-輸出

cut depth price new_value         new_char
1   5  61.5   326     20049     Idealkjh61.5
2   4  59.8   326   19494.8   Premiumkjh59.8
3   2  56.9   327   18606.3      Goodkjh56.9
4   4  62.4   334   20841.6   Premiumkjh62.4
5   2  63.3   335   21205.5      Goodkjh63.3
6   3  62.8   336   21100.8 Very Goodkjh62.8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM