【发布时间】:2019-09-26 21:11:57
【问题描述】:
我知道这个问题有很多答案,我从今天早上 10 点开始阅读它们(现在是下午 5 点)。
我一直试图弄清楚,我认为这很简单,如何从我的函数中对数据框进行子集化。我要做的就是打印出理想情况下通过对 DF 进行子集生成的向量。我遇到的问题是我在其他地方使用相同的desired_column_name 直接引用数据框,因此,我不能只是在我的论点中“添加引号”。我尝试在desired_column_name 参数中添加引号,然后在函数内应用noquote,但这也不起作用,并且使事情变得更糟。
以下是我正在使用的简单输入:
S = c(1,0,0,4,1,6,6,3,5,3,1)
population = data.frame(S)
下面是代码供参考:
proportion_of_elements= function(df_for_use, desired_column_name, desired_elements,logical){
DF = df_for_use
chr_desired_column_name = as.character(desired_column_name)
desired_column = DF[,chr_desired_column_name]
vec_length = length(desired_column)
num_of_desired_element = sum(desired_column == desired_elements)
proportion = num_of_desired_element/vec_length
statement_for_pop_prop = c("The proportion of ", desired_elements,'\'s', "from the population is: ", proportion)
format_vers_of_statement_for_pop_prop = str_c(statement_for_pop_prop, collapse = " ")
# summary = summarize(data_frame, mean = mean(desired_column_name, na.rm = TRUE), var = var(desired_column_name, na.rm = TRUE), sd = sd(desired_column_name, na.rm = TRUE))
#
# statement_of_summary = c("The summary statistics are the following: ", summary)
#
# format_of_summary = str_c(statement_of_summary, collapse = " ")
#print(format_vers_of_statement_for_pop_prop)
print(desired_column)
}
可重现的例子:
proportion_of_elements(population,S,1,FALSE)
期望的输出:
1 0 0 4 1 6 6 3 5 3 1
电流输出:
Error in `[.data.frame`(DF, , chr_desired_column_name) :
undefined columns selected
如前所述,我可以获得所需的输出,但这需要我在 desired_column_name 参数周围加上引号,这会导致其他所有内容都中断。
如您所见,我还尝试了另一种建议的解决方案,即在函数中重新定义数据框本身。我用DF 试过这个。注释掉的代码是使用desired_column_name 不带引号的部分。
如果我的代码过于复杂,我深表歉意。我看到的主要问题与desired_column 的解释方式有关。所以这是需要重点关注的部分。
感谢所有提供任何建议的人。
编辑
在 G. Grothendieck 给出的建议之后,我编辑了我的代码并得到了以下错误:
【问题讨论】:
-
您需要一个可重现的示例。向我们展示您拥有什么以及您想要生产什么。
-
将编辑...现在
-
这就是我遇到的问题。它不能与引号一起使用。在我的代码的注释掉部分中,我引用了数据框的列,它使用
S不带引号。 -
你确定你想要的输出是
1 0 0 4 1 6 6 3 5 3 1而不是1 4 1 6 6 0 1 0 1? -
@VitaliAvagyan 在我调整代码以生成结果时将其完全复制到 R 中
标签: r function dataframe subset