![](/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.