![](/img/trans.png)
[英]How do I pass a column name from a dataframe into a function using tidyverse syntax?
[英]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.